共用方式為


設定月曆控制項的日期狀態

月曆控制項的其中一個屬性是能夠儲存資訊,參考至該月份每天控制項狀態的日期。 這個資訊可用來強調目前顯示的月份中某些特別的日期。

注意事項注意事項

CMonthCalCtrl 物件必須有 MCS_DAYSTATE 樣式,以顯示日期狀態資訊。

日期狀態資訊是 32 位元資料型別, MONTHDAYSTATEMONTHDAYSTATE 位元欄位 (從 1 到 31) 的每個位元表示一個月裡一天的狀態。 如果位元是開啟的,則對應的日期會以粗體顯示;否則其顯示不會有任何強調。

有兩種方法可以設定月曆控制項上的日期狀態:明確呼叫 CMonthCalCtrl::SetDayState 或處理 MCN_GETDAYSTATE 通知訊息。

處理 MCN_GETDAYSTATE 通知訊息

MCN_GETDAYSTATE 資訊由控制項傳送,以判斷顯示月份中的日期應該如何顯示。

注意事項注意事項

因為控制項會快取之前和之後的月份,如需可見的月份,您會在新的月份被選取時接收這個告知。

若要適當地處理這個訊息,您必須判斷多少個月份日狀態資訊正在被要求,初始化一個具有適當值的 MONTHDAYSTATE 結構之陣列,並以新的資訊初始化相關的結構成員。 下列程序列出詳細的必要步驟,假設您有一個名為 m_monthcal 的 CMonthCalCtrl 物件,和一個 MONTHDAYSTATE 物件的陣列 mdState。

若要處理 MCN_GETDAYSTATE 通知訊息

  1. 使用屬性視窗,將 MCN_GETDAYSTATE 訊息的通知處理常式加入至 m_monthcal 物件 (請參閱 對應訊息至函式)。

  2. 在處理常式的的主體,加入下列程式碼:

    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 天)。

請參閱

參考

使用 CMonthCalCtrl

概念

控制項 (MFC)