Přístup k vloženému ovládacímu prvku měsíční kalendář
K objektu ovládacího prvku vloženého kalendáře měsíce lze přistupovat z objektu CDateTimeCtrl
pomocí volání GetMonthCalCtrl členské funkce.
Poznámka
Ovládací prvek vložený kalendář měsíce se používá jenom v případech, kdy ovládací prvek pro výběr data a času nemá sadu stylů DTS_UPDOWN .
To je užitečné, pokud chcete před zobrazením vloženého ovládacího prvku upravit určité atributy. Uděláte to tak, že zpracujete DTN_DROPDOWN oznámení, načtete ovládací prvek kalendáře měsíce (pomocí atributu CDateTimeCtrl::GetMonthCalCtrl) a provedete změny. Ovládací prvek kalendáře měsíce bohužel není trvalý.
Jinými slovy, když uživatel požádá o zobrazení ovládacího prvku měsíčního kalendáře, vytvoří se nový ovládací prvek měsíčního kalendáře (před oznámením DTN_DROPDOWN ). Ovládací prvek je zničen (po oznámení DTN_CLOSEUP ) při zavření uživatelem. To znamená, že všechny atributy, které upravíte před zobrazením vloženého ovládacího prvku, budou při zavření vloženého ovládacího prvku ztraceny.
Následující příklad ukazuje tento postup pomocí obslužné rutiny pro DTN_DROPDOWN oznámení. Kód změní barvu pozadí ovládacího prvku měsíčního kalendáře s voláním SetMonthCalColor na šedou. Kód je následující:
void CMyDialog::OnDtnDropdownDatetimepicker1(NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(pNMHDR);
//set the background color of the month to gray
COLORREF clr = RGB(100, 100, 100);
m_DateTimeCtrl.SetMonthCalColor(MCSC_MONTHBK, clr);
*pResult = 0;
}
Jak jsme uvedli dříve, všechny úpravy vlastností ovládacího prvku kalendáře měsíce budou ztraceny se dvěma výjimkami při zavření vloženého ovládacího prvku. První výjimka, barvy ovládacího prvku měsíční kalendář, již byly popsány. Druhou výjimkou je písmo používané ovládacím prvek kalendáře měsíce. Výchozí písmo můžete upravit voláním CDateTimeCtrl::SetMonthCalFont a předáním popisovače existujícího písma. Následující příklad (kde m_dtPicker
je objekt ovládacího prvku data a času) ukazuje jednu možnou metodu:
//create and initialize the font to be used
LOGFONT logFont = {0};
logFont.lfHeight = -12;
logFont.lfWeight = FW_NORMAL;
logFont.lfCharSet = DEFAULT_CHARSET;
_tcscpy_s(logFont.lfFaceName, _countof(logFont.lfFaceName),
_T("Verdana"));
m_MonthCalFont.CreateFontIndirect(&logFont);
m_DateTimeCtrl.SetMonthCalFont(m_MonthCalFont);
Po změně písma se voláním CDateTimeCtrl::SetMonthCalFont
uloží nové písmo a použije se při příštím zobrazení měsíčního kalendáře.