Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird veranschaulicht, wie Sie eine Formatbenachrichtigung verarbeiten, 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 die DTN_FORMAT Benachrichtigung, um Text anzufordern, der in einem Rückruffeld des Steuerelements angezeigt wird. Ihre Anwendung muss diese Benachrichtigung verarbeiten, damit das DTP-Steuerelement Informationen anzeigen kann, die es nicht nativ unterstützt.
Das folgende C++-Codebeispiel ist eine anwendungsdefinierte Funktion (DoFormat), die DTN_FORMAT Benachrichtigungscodes verarbeitet, indem eine Textzeichenfolge für ein Rückruffeld bereitgestellt wird. Die Anwendung ruft die anwendungsdefinierte GetDayNum-Funktion auf, um die in der Rückrufzeichenfolge zu verwendende Tagnummer anzufordern.
// DoFormat processes DTN_FORMAT to provide the text for a callback
// field in a DTP control. In this example, the callback field
// contains a value for the day of year. The function calls the
// application-defined function GetDayNum (below) to retrieve
// the correct value. StringCchPrintf truncates the formatted string if
// the entire string will not fit into the destination buffer.
void WINAPI DoFormat(HWND hwndDP, LPNMDATETIMEFORMAT lpDTFormat)
{
HRESULT hr = StringCchPrintf(lpDTFormat->szDisplay,
sizeof(lpDTFormat->szDisplay)/sizeof(lpDTFormat->szDisplay[0]),
L"%d",GetDayNum(&lpDTFormat->st));
if(SUCCEEDED(hr))
{
// Insert code here to handle the case when the function succeeds.
}
else
{
// Insert code here to handle the case when the function fails or the string
// is truncated.
}
}
Die anwendungsdefinierte GetDayNum-Funktion
Die anwendungsdefinierte Beispielfunktion DoFormat ruft die folgende anwendungsdefinierte GetDayNum-Funktion auf, um die Tagnummer basierend auf dem aktuellen Datum anzufordern. GetDayNum gibt einen INT-Wert zurück, der den aktuellen Tag des Jahres von 0 bis 366 darstellt. Diese Funktion ruft während der Verarbeitung eine andere anwendungsdefinierte Funktion auf, IsLeapYr.
// GetDayNum is an application-defined function that retrieves the
// correct day of year value based on the contents of a given
// SYSTEMTIME structure. This function calls the IsLeapYr function to
// check if the current year is a leap year. The function returns an
// integer value that represents the day of year.
int WINAPI GetDayNum(SYSTEMTIME *st)
{
int iNormYearAccum[ ] = {31,59,90,120,151,181,
212,243,273,304,334,365};
int iLeapYearAccum[ ] = {31,60,91,121,152,182,
213,244,274,305,335,366};
int iDayNum;
if(IsLeapYr(st->wYear))
iDayNum=iLeapYearAccum[st->wMonth-2]+st->wDay;
else
iDayNum=iNormYearAccum[st->wMonth-2]+st->wDay;
return (iDayNum);
}
Die anwendungsdefinierte IsLeapYr-Funktion
Die anwendungsdefinierte Funktion GetDayNum ruft die IsLeapYr-Funktion auf, um zu bestimmen, ob das aktuelle Jahr ein Schaltjahr ist. IsLeapYr gibt einen BOOL-Wert zurück, der TRUE ist, wenn es sich um ein Schaltjahr handelt, andernfalls FALSE .
// IsLeapYr determines if a given year value is a leap year. The
// function returns TRUE if the current year is a leap year, and
// FALSE otherwise.
BOOL WINAPI IsLeapYr(int iYear)
{
BOOL fLeapYr = FALSE;
// If the year is evenly divisible by 4 and not by 100, but is
// divisible by 400, it is a leap year.
if ((!(iYear % 4)) // each even fourth year
&& ((iYear % 100) // not each even 100 year
|| (!(iYear % 400)))) // but each even 400 year
fLeapYr = TRUE;
return (fLeapYr);
}
Zugehörige Themen