Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma ukazuje, jak nastavit informace o stavu dne. Ovládací prvek kalendáře měsíce používá informace o stavu dne k určení způsobu, jakým v ovládacím prvku vykresluje konkrétní dny.
Ovládací prvky kalendáře měsíce, které používají styl MCS_DAYSTATE, podporují stavy dnů. Informace o stavu dne jsou vyjádřeny jako 32bitový datový typ, MONTHDAYSTATE. Každý bit v MONTHDAYSTATE bitfield (0 až 30) určuje stav dne v měsíci. Pokud je bit zapnutý, zobrazí se odpovídající den tučně.
Co potřebujete vědět
Technologie
Požadavky
- C/C++
- Programování uživatelského rozhraní systému Windows
Instrukce
Aplikace může explicitně nastavit informace o stavu dne odesláním zprávy MCM_SETDAYSTATE nebo pomocí odpovídajícího makra MonthCal_SetDayState. Informace o stavu dne jsou však obvykle nastaveny v reakci na kód oznámení MCN_GETDAYSTATE, který se odešle při každé aktualizaci ovládacího prvku, protože například jiný měsíc se posune do zobrazení.
Následující příklad kódu ukazuje, jak zpracovat kód oznámení MCN_GETDAYSTATE v obslužné rutině WM_NOTIFY zprávy. Zpracovává MCN_GETDAYSTATE zadáním, že by se měl zvýraznit první a patnáctý den každého viditelného měsíce. cDayState člen struktury NMDAYSTATE určuje počet hodnot MONTHDAYSTATE, které jsou potřeba v matici, což má libovolnou maximální velikost. Kód pak smyčkuje, aby nastavil odpovídající bity v každém platném prvku pole, pomocí makra BOLDDAY definovaného aplikací .
#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;
Související témata