Festlegen von Tageszuständen
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