设置月历控件的日状态

月历控件的一个特性是存储一个月的每一天的信息的能力(称为“控件的日状态”)。 此信息用于强调当前所显示月份的特定日期。

注意

CMonthCalCtrl 对象必须具有 MCS_DAYSTATE 样式以显示日状态信息。

日状态信息用一个 32 位数据类型 MONTHDAYSTATE 表示。 MONTHDAYSTATE 位域中的每个位(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
Controls