Verarbeiten der DTN_FORMATQUERY-Benachrichtigung
In diesem Thema wird veranschaulicht, wie eine Formatabfragebenachrichtigung verarbeitet wird, die vom DTP-Steuerelement (Datums- und Uhrzeitauswahl) gesendet wird.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Programmierung der Windows-Benutzeroberfläche
Anweisungen
Ein DTP-Steuerelement sendet einen DTN_FORMATQUERY Benachrichtigungscode, um Informationen über die maximal mögliche Größe eines Rückruffelds innerhalb des Steuerelements anzufordern. Ihre Anwendung muss diese Meldung verarbeiten, um sicherzustellen, dass alle Felder ordnungsgemäß angezeigt werden.
Das folgende C++-Codebeispiel ist eine anwendungsdefinierte Funktion, die den DTN_FORMATQUERY Benachrichtigungscode verarbeitet, indem die Breite der breitesten möglichen Zeichenfolge für ein bestimmtes Rückruffeld berechnet wird.
Sicherheitswarnung: Die falsche Verwendung von lstrcmp kann die Sicherheit Ihrer Anwendung beeinträchtigen. Beispielsweise sollten Sie vor dem Aufrufen von lstrcmp im folgenden Codebeispiel sicherstellen, dass die beiden Zeichenfolgen NULL-beendet sind. Sie sollten Sicherheitsüberlegungen: Microsoft Windows-Steuerelemente lesen, bevor Sie fortfahren.
// 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);
}
Zugehörige Themen