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);
}
Temas relacionados