Partager via


Comment traiter la notification DTN_FORMATQUERY

Cette rubrique montre comment traiter une notification de requête de format envoyée par le contrôle de sélecteur de date et d’heure (DTP).

Bon à savoir

Technologies

Prérequis

  • C/C++
  • Programmation de l’interface utilisateur Windows

Instructions

Un contrôle DTP envoie un code de notification DTN_FORMATQUERY pour demander des informations sur la taille maximale possible d’un champ de rappel dans le contrôle. Votre application doit gérer ce message pour s’assurer que tous les champs sont affichés correctement.

L’exemple de code C++ suivant est une fonction définie par l’application qui traite le code de notification DTN_FORMATQUERY en calculant la largeur de la chaîne la plus large possible pour un champ de rappel donné.

Avertissement de sécurité : L’utilisation incorrecte de lstrcmp peut compromettre la sécurité de votre application. Par exemple, avant d’appeler lstrcmp dans l’exemple de code suivant, vous devez vérifier que les deux chaînes sont terminées par null. Vous devez consulter Considérations relatives à la sécurité : Contrôles Microsoft Windows avant de continuer.

//  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);
}

Utilisation des contrôles sélecteur de date et d’heure

Informations de référence sur les contrôles du sélecteur de date et d’heure

Sélecteur de date et d’heure