設定月曆控制項的日期狀態
月曆控制項的其中一個屬性是針對該月份的每一天儲存資訊的能力,稱為控制項的日期狀態。 這項資訊可用來強調目前顯示的月份中某些特別的日期。
注意
CMonthCalCtrl
物件必須具有MCS_DAYSTATE樣式,才能顯示日期狀態資訊。
日期狀態資訊會以 32 位資料類型 MONTHDAYSTATE 表示。 MONTHDAYSTATE 位欄位中的每一 位 (1 到 31) 都代表一個月中的一天狀態。 如果位元是開啟的,則對應的日期會以粗體顯示;否則就不會強調其顯示。
設定月曆控制項的日期狀態有兩種方法:明確呼叫 CMonthCalCtrl::SetDayState 或處理MCN_GETDAYSTATE通知訊息。
處理 MCN_GETDAYSTATE 通知訊息
控制項會傳送MCN_GETDAYSTATE訊息,以判斷應如何顯示可見月份內的天數。
注意
因為控制項會快取之前和之後的月份 (相對於可見的月份),所以您會在選擇新的月份時接收到這個通知。
若要正確處理此訊息,您必須判斷要求多少月日狀態資訊、使用適當值初始化 MONTHDAYSTATE 結構的陣列 ,以及使用新資訊初始化相關的結構成員。 下列程式詳述必要步驟,假設您有名為 CMonthCalCtrl
m_monthcal 的物件,以及 MONTHDAYSTATE 物件的 陣列 mdState 。
處理 MCN_GETDAYSTATE 通知訊息
使用類別精 靈 ,將MCN_GETDAYSTATE訊息的通知處理常式新增至m_monthcal 物件(請參閱 將訊息對應至 函式 )。
在處理常式的主體中,加入下列程式碼:
LPNMDAYSTATE pDayState = reinterpret_cast<LPNMDAYSTATE>(pNMHDR); int iMax = pDayState->cDayState; for (int i = 0; i < iMax; i++) { pDayState->prgDayState[i] = (MONTHDAYSTATE)0; // init to 0 pDayState->prgDayState[i] |= 0x01 << 14; // set 15th bit to 1 }
此範例會將 pNMHDR 指標轉換成適當的類型,然後判斷要求的資訊數個月(
pDayState->cDayState
)。 對於每個月份,目前的位元欄位 (pDayState->prgDayState[i]
) 會初始化為零,同時會設定需要的日期 (在這個情況中為每個月的第 15 天)。