次の方法で共有


DTN_FORMATQUERY 通知を処理する方法

このトピックでは、日付と時刻の選択 (DTP) コントロールが送信する Format Query 通知を処理する方法について説明します。

知っておくべきこと

テクノロジ

前提条件

  • C/C++
  • Windows ユーザー インターフェイス プログラミング

手順

DTP コントロールは、DTN_FORMATQUERY 通知コードを送信して、コントロール内の [コールバック] フィールドの可能な最大サイズに関する情報を要求します。 アプリケーションでは、すべてのフィールドが正しく表示されるように、このメッセージを処理する必要があります。

次の C++ コード例は、特定の [コールバック] フィールドに対して可能な限り広い文字列の幅を計算することによって、DTN_FORMATQUERY 通知コードを処理するアプリケーション定義関数です。

セキュリティ警告: lstrcmp を誤って使用すると、アプリケーションのセキュリティを損なう場合があります。 たとえば、次のコード例で lstrcmp を呼び出す前に、2 つの文字列が 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);
}

日付と時刻の選択コントロールの使用

日付と時刻の選択コントロール リファレンス

日付と時刻の選択