访问嵌入的月历控件
通过调用 GetMonthCalCtrl 成员函数,可以从 CDateTimeCtrl
对象访问嵌入式月历控件对象。
注意
仅当日期和时间选择器控件未设置 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
更改字体之后,将存储新的字体,并在下次显示月历时使用该字体。