다음을 통해 공유


일 상태를 설정하는 방법

이 항목에서는 일 상태 정보를 설정하는 방법을 설명합니다. 월 달력 컨트롤은 일 상태 정보를 사용하여 컨트롤 내에서 특정 요일을 그리는 방법을 결정합니다.

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;

월 달력 컨트롤 참조

월 달력 컨트롤 정보

월 달력 컨트롤 사용