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 Tageszustandsinformationen festlegen. Das Monatskalender-Steuerelement verwendet Tageszustandsinformationen, um zu bestimmen, wie bestimmte Tage innerhalb des Steuerelements erstellt werden.
Monatskalendersteuerelemente, die die MCS_DAYSTATE-Stil-Unterstützungstagszustände verwenden. Tageszustandsinformationen werden als 32-Bit-Datentyp , MONTHDAYSTATE, ausgedrückt. Jedes Bit in einem MONTHDAYSTATE-Bitfeld (0 bis 30) gibt den Zustand eines Tages in einem Monat an. Wenn ein Bit aktiviert ist, wird der entsprechende Tag fett formatiert angezeigt.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Programmierung der Windows-Benutzeroberfläche
Anweisungen
Eine Anwendung kann Explizit Tageszustandsinformationen festlegen, indem sie die MCM_SETDAYSTATE Nachricht sendet oder das entsprechende Makro MonthCal_SetDayState verwendet. Tageszustandsinformationen werden jedoch in der Regel als Reaktion auf den MCN_GETDAYSTATE Benachrichtigungscode festgelegt, der gesendet wird, wenn das Steuerelement aktualisiert werden muss, da z. B. ein anderer Monat in die Ansicht gescrollt wurde.
Der folgende Beispielcode zeigt, wie der MCN_GETDAYSTATE-Benachrichtigungscode in einem WM_NOTIFY-Nachrichtenhandler verarbeitet wird. Es verarbeitet MCN_GETDAYSTATE, indem angegeben wird, dass der erste und der fünfzehnte Tag jedes sichtbaren Monats hervorgehoben werden sollen. Der cDayState-Member der NMDAYSTATE-Struktur gibt die Anzahl der MONTHDAYSTATE-Werte an, die im Array benötigt werden, das eine beliebige maximale Größe erhält. Der Code wird dann mithilfe des von der Anwendung definierten BOLDDAY-Makros schleifen, um die entsprechenden Bits in jedem gültigen Element des Arrays festzulegen.
#define BOLDDAY(ds, iDay) \
if (iDay > 0 && iDay < 32)(ds) |= (0x00000001 << (iDay - 1))
case WM_NOTIFY:
if (((LPNMHDR)lParam)->code == MCN_GETDAYSTATE)
{
MONTHDAYSTATE rgMonths[12] = { 0 };
int cMonths = ((NMDAYSTATE*)lParam)->cDayState;
for (int i = 0; i < cMonths; i++)
{
BOLDDAY(rgMonths[i], 1);
BOLDDAY(rgMonths[i], 15);
}
((NMDAYSTATE*)lParam)->prgDayState = rgMonths;
return TRUE;
}
break;
Zugehörige Themen