Condividi tramite


Come elaborare la notifica di DTN_FORMATQUERY

In questo argomento viene illustrato come elaborare una notifica formatta query inviata dal controllo selezione data e ora (DTP).

Informazioni importanti

Tecnologie

Prerequisiti

  • C/C++
  • Programmazione dell'interfaccia utente di Windows

Istruzioni

Un controllo DTP invia un codice di notifica DTN_FORMATQUERY per richiedere informazioni sulle dimensioni massime possibili di un campo di callback all'interno del controllo. L'applicazione deve gestire questo messaggio per assicurarsi che tutti i campi vengano visualizzati correttamente.

L'esempio di codice C++ seguente è una funzione definita dall'applicazione che elabora il codice di notifica DTN_FORMATQUERY calcolando la larghezza della stringa più ampia possibile per un determinato campo di callback.

Avviso di sicurezza: l'uso di lstrcmp in modo errato può compromettere la sicurezza dell'applicazione. Ad esempio, prima di chiamare lstrcmp nell'esempio di codice seguente, assicurarsi che le due stringhe siano con terminazione Null. Prima di continuare, vedere Considerazioni sulla sicurezza: Controlli di 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);
}

Uso di controlli selezione data e ora

Informazioni di riferimento sul controllo Selezione data e ora

Selezione data e ora