如何设置日期状态

本主题演示如何设置日状态信息。 月历控件使用日期状态信息来确定如何在控件内绘制特定日期。

使用 MCS_DAYSTATE 样式的月历控件可支持日期状态。 日状态信息用一个 32 位数据类型 MONTHDAYSTATE 表示MONTHDAYSTATE 位字段(0 至 30)中的每个位都指定了一个月中某一天的状态。 如果某个位处于开启状态,则相应的日期会以粗体显示。

需要了解的事项

技术

先决条件

  • C/C++
  • Windows 用户界面编程

说明

应用程序可以通过发送 MCM_SETDAYSTATE 消息或使用相应的宏 MonthCal_SetDayState 来显式设置日期状态信息。 但是,日期状态信息通常是在响应 MCN_GETDAYSTATE 通知代码时设置的,该代码会在控件需要刷新时发送,例如,控件滚动显示了不同的月份。

以下示例代码显示了如何在 WM_NOTIFY 消息处理程序中处理 MCN_GETDAYSTATE 通知代码。 它会通过指定突出显示每个可见月份的第 1 天和第 15 天来处理 MCN_GETDAYSTATE。 NMDAYSTATE 结构中的 cDayState 成员指定了数组中所需的 MONTHDAYSTATE 值的数量,其最大大小可任意设定。 然后,代码将使用应用程序定义的 BOLDDAY 宏在数组中循环设置每个有效元素的相应位。

    #define BOLDDAY(ds, iDay)  \
        if (iDay > 0 && iDay < 32)(ds) |= (0x00000001 << (iDay - 1))

    case WM_NOTIFY:
            if (((LPNMHDR)lParam)->code == MCN_GETDAYSTATE)
            {
                MONTHDAYSTATE rgMonths[12] = { 0 };
                int cMonths = ((NMDAYSTATE*)lParam)->cDayState;
                for (int i = 0; i < cMonths; i++)
                {
                    BOLDDAY(rgMonths[i], 1);
                    BOLDDAY(rgMonths[i], 15);
                }
                ((NMDAYSTATE*)lParam)->prgDayState = rgMonths;
                return TRUE;
            }
            break;

月历控件参考

关于月历控件

使用月历控件