Поделиться через


Доступ к встроенному элементу управления "Календарь на месяц"

Объект управления календарем внедренного месяца можно получить из CDateTimeCtrl объекта с помощью вызова функции члена GetMonthCalCtrl .

Примечание.

Элемент управления "Внедренный календарь" используется только в том случае, если элемент управления выбора даты и времени не имеет набора стилей DTS_UPDOWN .

Это полезно, если вы хотите изменить определенные атрибуты перед отображением внедренного элемента управления. Для этого обработайте уведомление DTN_DROPDOWN , получите элемент управления календарем месяца (с помощью CDateTimeCtrl::GetMonthCalCtrl) и внесите изменения. К сожалению, элемент управления календарем месяца не является постоянным.

Другими словами, когда пользователь запрашивает отображение элемента управления календарем месяца, создается новый элемент управления календарем месяца (до уведомления DTN_DROPDOWN ). Элемент управления уничтожается (после уведомления DTN_CLOSEUP ) при закрытии пользователем. Это означает, что все атрибуты, которые вы изменяете перед отображением внедренного элемента управления, теряются при закрытии внедренного элемента управления.

В следующем примере показана эта процедура с помощью обработчика для уведомления DTN_DROPDOWN . Код изменяет цвет фона элемента управления календаря месяца с вызовом SetMonthCalColor на серый. Вот ее код:

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;
}

Как уже упоминалось ранее, все изменения свойств элемента управления календаря месяца теряются при закрытии внедренного элемента управления календаря. Первое исключение, цвета элемента управления календарем месяца, уже обсуждались. Вторым исключением является шрифт, используемый элементом управления календарем месяца. Вы можете изменить шрифт по умолчанию, выполнив вызов CDateTimeCtrl::SetMonthCalFont, передав дескриптор существующего шрифта. В следующем примере (где m_dtPicker находится объект управления датой и временем) демонстрируется один из возможных методов:


//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);

После изменения шрифта при вызове CDateTimeCtrl::SetMonthCalFontновый шрифт сохраняется и используется следующий календарь месяца.

См. также

Использование CDateTimeCtrl
Controls