DTN_FORMATQUERY 알림을 처리하는 방법

이 항목에서는 DTP(날짜 및 시간 선택기) 컨트롤에서 보낸 서식 쿼리 알림을 처리하는 방법을 보여 줍니다.

알아야 하는 작업

기술

필수 구성 요소

  • C/C++
  • Windows 사용자 인터페이스 프로그래밍

지침

DTP 컨트롤은 DTN_FORMATQUERY 알림 코드를 전송하여 컨트롤 내 콜백 필드의 가능한 최대 크기에 대한 정보를 요청합니다. 모든 필드가 제대로 표시되도록 애플리케이션에서 이 메시지를 처리해야 합니다.

다음 C++ 코드 예는 지정된 콜백 필드에 대해 가능한 가장 넓은 문자열의 너비를 계산하여 DTN_FORMATQUERY 알림 코드를 처리하는 애플리케이션 정의 함수입니다.

보안 경고:lstrcmp를 잘못 사용하면 애플리케이션의 보안이 손상될 수 있습니다. 예를 들어, 다음 코드 예에서 lstrcmp를 호출하기 전에 두 문자열이 null로 끝나는지 확인해야 합니다. 계속하기 전에 보안 고려 사항: Microsoft Windows 컨트롤을 검토해야 합니다.

//  DoFormatQuery processes DTN_FORMATQUERY messages to ensure that the
//  DTP control displays callback fields properly.
//

void WINAPI DoFormatQuery(
 HWND hwndDP, 
 LPNMDATETIMEFORMATQUERY lpDTFQuery)
{
    HDC hdc;
    HFONT hFont, hOrigFont;

    //  Prepare the device context for GetTextExtentPoint32 call.
    hdc = GetDC(hwndDP);

    hFont = (HFONT) SendMessage(hwndDP, WM_GETFONT, 0L, 0L); 

    if(!hFont)
        hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

    hOrigFont = (HFONT) SelectObject(hdc, hFont);

    // Check to see if this is the callback segment desired. If so,
    // use the longest text segment to determine the maximum 
    // width of the callback field, and then place the information into 
    // the NMDATETIMEFORMATQUERY structure.
    if(!lstrcmp(L"XX",lpDTFQuery->pszFormat))
        GetTextExtentPoint32 (hdc,
                          L"366",  // widest date string
                          3,
                          &lpDTFQuery->szMax);

    // Reset the font in the device context; then release the context.
    SelectObject(hdc,hOrigFont);
    ReleaseDC(hwndDP, hdc);
}

날짜 및 시간 선택기 컨트롤 사용

날짜 및 시간 선택기 컨트롤 참조

날짜 및 시간 선택기