以下是 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