Udostępnij za pośrednictwem


Uzyskiwanie dostępu do osadzonego formantu kalendarza miesięcznego

Dostęp do osadzonego CDateTimeCtrl obiektu kontrolki kalendarza miesiąca można uzyskać z obiektu z wywołaniem funkcji składowej GetMonthCalCtrl .

Uwaga

Osadzona kontrolka kalendarza miesiąca jest używana tylko wtedy, gdy kontrolka selektora daty i godziny nie ma zestawu stylów DTS_UPDOWN .

Jest to przydatne, jeśli chcesz zmodyfikować określone atrybuty przed wyświetleniem osadzonej kontrolki. Aby to zrobić, obsłuż powiadomienie DTN_DROPDOWN , pobierz kontrolkę kalendarza miesiąca (przy użyciu CDateTimeCtrl::GetMonthCalCtrl) i wprowadź modyfikacje. Niestety kontrolka kalendarza miesiąca nie jest trwała.

Innymi słowy, gdy użytkownik zażąda wyświetlenia kontrolki kalendarza miesiąca, zostanie utworzona kontrolka kalendarza nowego miesiąca (przed powiadomieniem DTN_DROPDOWN ). Kontrolka zostanie zniszczona (po powiadomieniu o DTN_CLOSEUP) po odrzuceniu przez użytkownika. Oznacza to, że wszystkie atrybuty modyfikowane przed wyświetleniem osadzonej kontrolki zostaną utracone po odrzuceniu osadzonej kontrolki.

W poniższym przykładzie przedstawiono tę procedurę przy użyciu procedury obsługi dla powiadomienia DTN_DROPDOWN . Kod zmienia kolor tła kontrolki kalendarza miesiąca z wywołaniem SetMonthCalColor na szary. Kod jest następujący:

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 modyfikacje właściwości kontrolki kalendarza miesiąca zostaną utracone, z dwoma wyjątkami, gdy osadzona kontrolka zostanie odrzucona. Pierwszy wyjątek, kolory kontrolki kalendarza miesiąca, zostały już omówione. Drugim wyjątkiem jest czcionka używana przez kontrolkę kalendarza miesiąca. Czcionkę domyślną można zmodyfikować, wywołując polecenie CDateTimeCtrl::SetMonthCalFont, przekazując uchwyt istniejącej czcionki. Poniższy przykład (gdzie m_dtPicker to obiekt kontrolki 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);

Po zmianie czcionki z wywołaniem metody CDateTimeCtrl::SetMonthCalFontjest przechowywana nowa czcionka i jest używana przy następnym wyświetlaniu kalendarza miesiąca.

Zobacz też

Korzystanie z CDateTimeCtrl
Kontrolki