可以通过调用 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
来存储新字体,并在下次显示月历时使用。