如何设置日期状态
本主题演示如何设置日状态信息。 月历控件使用日期状态信息来确定如何在控件内绘制特定日期。
使用 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;
相关主题