以下是 SetDayState 方法的原型:
BOOL SetDayState(
int nMonths,
LPMONTHDAYSTATE lpDayState
);
- nMonths 参数表示 lpDayState 数组中包含的月份数。
- lpDayState 参数是一个指向 MONTHDAYSTATE 结构数组的指针,每个结构包含了一个月内的日期状态信息。
typedef struct tagMONTHDAYSTATE {
int iYear;
int iMonth;
DWORD rgDayState[42];
} MONTHDAYSTATE, *LPMONTHDAYSTATE;
rgDayState 数组包含了一个月内每一天的状态信息。可能的状态值有:
- MC_DATERANGE:日期可选择
- MC_DATE:日期是当前月份的一部分,但不能选择
- MC_FLAG:日期标记为不同的状态
以下是一个简单的示例代码,演示如何使用 SetDayState 方法:
// 假设 m_monthCal 是你的 CMonthCalCtrl 对象
// 设置为当前月份的日期为可选择,其他日期不可选择
COleDateTime currentDate = COleDateTime::GetCurrentTime();
int nYear = currentDate.GetYear();
int nMonth = currentDate.GetMonth();
MONTHDAYSTATE dayState;
dayState.iYear = nYear;
dayState.iMonth = nMonth;
for (int i = 0; i < 42; i++) {
dayState.rgDayState[i] = (i < currentDate.GetDay()) ? MC_DATE : MC_DATERANGE;
}
m_monthCal.SetDayState(1, &dayState);
这将使月历控件中当前月份之前的日期不可选择,当前月份及之后的日期可选择。
转载请注明出处:http://www.zyzy.cn/article/detail/20823/MFC/CMonthCalCtrl