存取內嵌月曆控制項
您可以使用 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
變更字型後,下一次月曆便會顯示已儲存並使用的新字型。