Compartir a través de


Procedimiento para procesar la notificación de DTN_FORMATQUERY

En este tema se muestra cómo procesar una notificación de consulta de formato enviada por el control selector de fecha y hora (DTP).

Lo que necesita saber

Tecnologías

Requisitos previos

  • C/C++
  • Programación de la interfaz de usuario de Windows

Instrucciones

Un control DTP envía un código de notificación DTN_FORMATQUERY para solicitar información sobre el tamaño máximo posible de un campo de devolución de llamada dentro del control. La aplicación debe controlar este mensaje para asegurarse de que todos los campos se muestran correctamente.

El siguiente ejemplo de código de C++ es una función definida por la aplicación que procesa el código de notificación de DTN_FORMATQUERY calculando el ancho de la cadena más amplia posible para un campo de devolución de llamada determinado.

Advertencia de seguridad: El uso de lstrcmp incorrectamente puede poner en peligro la seguridad de la aplicación. Por ejemplo, antes de llamar a lstrcmp en el ejemplo de código siguiente, debe asegurarse de que las dos cadenas están terminadas en null. Debe revisar Consideraciones de seguridad: Controles de Microsoft Windows antes de continuar.

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

Usar controles selectores de fecha y hora

Referencia de control selector de fecha y hora

Selector de fecha y hora