MonthCalendar 컨트롤의 일 상태 설정
월 달력 컨트롤의 특성 중 하나는 해당 월의 각 날짜에 대해 컨트롤의 일 상태라고 하는 정보를 저장하는 기능입니다. 이 정보는 현재 표시된 월의 특정 날짜를 강조하는 데 사용됩니다.
참고 항목
개체에 CMonthCalCtrl
일 상태 정보를 표시하려면 MCS_DAYSTATE 스타일이 있어야 합니다.
일 상태 정보는 32비트 데이터 형식, MONTHDAYSTATE로 표현됩니다. MONTHDAYSTATE 비트 필드(1~31)의 각 비트는 한 달의 일 상태를 나타냅니다. 비트가 켜져 있으면 해당 날짜가 굵게 표시됩니다. 그렇지 않으면 강조하지 않고 표시됩니다.
월 달력 컨트롤의 일 상태를 설정하는 방법에는 CMonthCalCtrl::SetDayState를 명시적으로 호출하거나 MCN_GETDAYSTATE 알림 메시지를 처리하는 두 가지 방법이 있습니다.
MCN_GETDAYSTATE 알림 메시지 처리
MCN_GETDAYSTATE 메시지는 표시되는 월 내의 일 수를 표시하는 방법을 결정하기 위해 컨트롤에 의해 전송됩니다.
참고 항목
컨트롤은 표시되는 월과 관련하여 이전 달과 다음 달을 캐시하므로 새 월을 선택할 때마다 이 알림을 받게 됩니다.
이 메시지를 제대로 처리하려면 요청되는 월 일 상태 정보를 확인하고, 적절한 값을 사용하여 MONTHDAYSTATE 구조체의 배열을 초기화하고, 관련 구조체 멤버를 새 정보로 초기화해야 합니다. 필요한 단계를 자세히 설명하는 다음 절차에서는 m_monthcal이라는 개체와 MONTHDAYSTATE 개체의 배열인 mdState가 있다고 가정 CMonthCalCtrl
합니다.
MCN_GETDAYSTATE 알림 메시지를 처리하려면
클래스 마법사를 사용하여 m_monthcal 개체에 MCN_GETDAYSTATE 메시지에 대한 알림 처리기를 추가합니다(Functions에 메시지 매핑 참조).
처리기 본문에 다음 코드를 추가합니다.
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]
)가 0으로 초기화되고 필요한 날짜가 설정됩니다(이 경우 매월 15일).