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