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


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

Один из атрибутов календаря месяца возможность хранения данных, которые называются дня состояние элемента управления, на каждый день месяца. Эти сведения используются для выделения определенных дат для в данный момент отображаемое название месяца.

Примечание

Объект CMonthCalCtrl должен иметь стиль MCS_DAYSTATE для отображения информации о состоянии дня.

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

2 Для параметра метода состояние дня месяца календаря: явно, вызвав метод CMonthCalCtrl::SetDayState или при обработке сообщения уведомления MCN_GETDAYSTATE.

Для обработки сообщений уведомлений MCN_GETDAYSTATE

Сообщение MCN_GETDAYSTATE передается элементом управления для определения способа дни в пределах видимых месяцев должны отображаться.

Примечание

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

Для правильной обработки это сообщение необходимо указать сведения о состоянии, сколько дней, месяцев был запрошен для инициализации массива структур MONTHDAYSTATE с правильными значениями и инициализирует связанный элемент структуры с новыми данными. В следующей процедуре, детализируя основные шаги, высказывать, с именем объекта CMonthCalCtrlm_monthcal и массив объектов MONTHDAYSTATE, mdState.

Для обработки сообщений уведомлений MCN_GETDAYSTATE

  1. С помощью окна свойств, добавьте обработчик уведомления для сообщения MCN_GETDAYSTATE в объект m_monthcal (см. Сообщения сопоставления в функции).

  2. В теле обработчика, добавьте следующий код:

    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]) присваивается значение равно нулю, а затем необходимые даты задано (в данном случае пятнадцат из каждого месяца).

См. также

Ссылки

Использование CMonthCalCtrl

Основные понятия

Элементы управления (MFC)