Поделиться через


Настройка состояний дня

В этом разделе показано, как задать сведения о состоянии дня. Элемент управления календарем месяца использует сведения о состоянии дня для определения того, как он рисует определенные дни в элементе управления.

Элементы управления календарем месяца, использующие состояния дня поддержки стиля MCS_DAYSTATE . Сведения о состоянии дня выражаются как 32-разрядный тип данных, MONTHDAYSTATE. Каждый бит в бите MONTHDAYSTATE (от 0 до 30) указывает состояние дня в месяц. Если бит включен, соответствующий день отображается полужирным шрифтом.

Это важно знать

Технологии

Необходимые компоненты

  • C/C++
  • Программирование пользовательского интерфейса Windows

Instructions

Приложение может явно задать сведения о состоянии дня, отправив сообщение MCM_SETDAYSTATE или используя соответствующий макрос, MonthCal_SetDayState. Однако сведения о состоянии дня обычно задаются в ответ на код уведомлений MCN_GETDAYSTATE , который отправляется при каждом обновлении элемента управления, так как, например, другой месяц прокрутился в представление.

В следующем примере кода показано, как обработать код уведомления MCN_GETDAYSTATE в обработчике сообщений WM_NOTIFY . Он обрабатывает MCN_GETDAYSTATE, указывая, что следует выделить первый и пятнадцатый день каждого видимого месяца. Элемент cDayState структуры NMDAYSTATE указывает количество значений 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;

Справочник по элементу управления "Календарь месяца"

Элементы управления календарем месяца

Использование элементов управления календарем месяца