Como processar a notificação de DTN_FORMATQUERY
Este tópico demonstra como processar uma notificação de Consulta de Formato enviada pelo controle DTP (seletor de data e hora).
O que você precisa saber
Tecnologias
Pré-requisitos
- C/C++
- Programação da interface do usuário do Windows
Instruções
Um controle DTP envia um código de notificação DTN_FORMATQUERY para solicitar informações sobre o tamanho máximo possível de um campo de retorno de chamada dentro do controle. Seu aplicativo deve manipular essa mensagem para garantir que todos os campos sejam exibidos corretamente.
O exemplo de código C++ a seguir é uma função definida pelo aplicativo que processa o código de notificação DTN_FORMATQUERY calculando a largura da cadeia de caracteres mais ampla possível para um determinado campo de retorno de chamada.
Aviso de segurança: Usar lstrcmp incorretamente pode comprometer a segurança do seu aplicativo. Por exemplo, antes de chamar lstrcmp no exemplo de código a seguir, verifique se as duas cadeias de caracteres são terminadas em nulo. Você deve revisar Considerações de segurança: Controles do 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);
}
Tópicos relacionados