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


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

Встроенный объект календаря месяца можно получить из объекта 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;
}

Как уже говорилось ранее, все изменения свойств календаря месяца теряются, с 2 исключения, если встроенный элемент управления закрыт. Первое исключение, цвета календаря месяца, уже был рассмотрен. Второе исключение шрифт, используемый элементом управления календаря месяца. Можно изменить шрифт по умолчанию вызовом 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

Основные понятия

Элементы управления (MFC)