Nastavení stavu dne v ovládacím prvku měsíční kalendář
Jedním z atributů ovládacího prvku kalendáře měsíce je schopnost ukládat informace, označované jako stav dne ovládacího prvku, pro každý den v měsíci. Tyto informace slouží ke zvýraznění určitých kalendářních dat pro aktuálně zobrazený měsíc.
Poznámka
Objekt CMonthCalCtrl
musí mít styl MCS_DAYSTATE pro zobrazení informací o stavu dne.
Informace o stavu dne se vyjadřují jako 32bitový datový typ MONTHDAYSTATE. Každý bit v bitovém poli MONTHDAYSTATE (1 až 31) představuje stav dne v měsíci. Pokud je bit zapnutý, zobrazí se odpovídající den tučně; jinak se zobrazí bez zdůraznění.
Existují dvě metody pro nastavení stavu dne ovládacího prvku kalendáře měsíce: explicitně s voláním CMonthCalCtrl::SetDayState nebo zpracováním MCN_GETDAYSTATE oznámení.
Zpracování zprávy oznámení MCN_GETDAYSTATE
Ovládací prvek odešle zprávu MCN_GETDAYSTATE, aby určil, jak se mají zobrazit dny v viditelných měsících.
Poznámka
Vzhledem k tomu, že ovládací prvek ukládá předchozí a následující měsíce do mezipaměti, pokud jde o viditelný měsíc, obdržíte toto oznámení při každém výběru nového měsíce.
Chcete-li správně zpracovat tuto zprávu, musíte určit, kolik měsíců jsou informace o stavu požadovány, inicializovat pole struktury MONTHDAYSTATE se správnými hodnotami a inicializovat související člen struktury s novými informacemi. Následující postup podrobně popisuje nezbytné kroky, předpokládá, že máte CMonthCalCtrl
objekt s názvem m_monthcal a pole MONTHDAYSTATE objekty, mdState.
Zpracování zprávy s oznámením MCN_GETDAYSTATE
Pomocí Průvodce třídou přidejte obslužnou rutinu oznámení pro MCN_GETDAYSTATE zprávu do objektu m_monthcal (viz mapování zpráv na funkce).
Do těla obslužné rutiny přidejte následující kód:
LPNMDAYSTATE pDayState = reinterpret_cast<LPNMDAYSTATE>(pNMHDR); int iMax = pDayState->cDayState; for (int i = 0; i < iMax; i++) { pDayState->prgDayState[i] = (MONTHDAYSTATE)0; // init to 0 pDayState->prgDayState[i] |= 0x01 << 14; // set 15th bit to 1 }
Příklad převede ukazatel pNMHDR na správný typ a pak určuje, kolik měsíců se požaduje (
pDayState->cDayState
). Pro každý měsíc se aktuální bitová pole (pDayState->prgDayState[i]
) inicializuje na nulu a pak se nastaví potřebná data (v tomto případě 15. den každého měsíce).