Uzyskiwanie dostępu do osadzonego formantu kalendarza miesięcznego
Obiekt formantu kalendarza miesiąca osadzony jest możliwy z CDateTimeCtrl obiekt z wezwaniem do GetMonthCalCtrl funkcji składowej.
[!UWAGA]
Miesiąc osadzony formant kalendarza jest używana tylko wtedy, gdy nie ma formantu wyboru daty i godziny DTS_UPDOWN zestaw stylów.
Jest to przydatne, jeśli chcesz zmodyfikować niektórych atrybutów, zanim zostanie wyświetlony osadzony formant.Aby osiągnąć ten cel, obsługi DTN_DROPDOWN powiadomienia, pobrać formancie kalendarza miesięcznego (za pomocą CDateTimeCtrl::GetMonthCalCtrl) i dokonanie modyfikacji.Niestety w formancie kalendarza miesięcznego nie jest trwałe.
Innymi słowy, gdy użytkownik zażąda wyświetlania w formancie kalendarza miesięcznego, formancie kalendarza miesięcznego nowy jest tworzony (przed DTN_DROPDOWN powiadomienia).Formant jest niszczony (po DTN_CLOSEUP powiadomienia) kiedy zostało odrzucone przez użytkownika.Oznacza to, że wszelkie atrybuty, które modyfikujesz, przed wyświetleniem osadzonego formantu zostają utracone po osadzony formant zostaje odrzucona.
W poniższym przykładzie zademonstrowano tę procedurę przy użyciu programu obsługi dla DTN_DROPDOWN powiadomienia.Kod zmienia kolor tła formantu kalendarza miesiąca, z wezwaniem do SetMonthCalColor, na szary.Kod jest następująca:
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 wspomniano wcześniej, wszystkie zmiany do właściwości formantu kalendarza miesiąca zostaną utracone, dwa wyjątki, gdy osadzony formant zostaje odrzucona.Pierwszy wyjątek kolorów w formancie kalendarza miesięcznego już zostały omówione.Drugi wyjątek jest czcionka używana w formancie kalendarza miesięcznego.Można zmodyfikować domyślną czcionkę rozmowy w celu CDateTimeCtrl::SetMonthCalFont, mijania uchwyt istniejące czcionki.Poniższy przykład (gdzie m_dtPicker jest przedmiotem kontroli daty i godziny) przedstawia jedną z możliwych metod:
//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);
Gdy czcionki uległ zmianie, z wezwaniem do CDateTimeCtrl::SetMonthCalFont, nowa czcionka są przechowywane i wykorzystywane przy następnym kalendarza miesięcznego ma być wyświetlany.