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


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

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

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

Что нужно знать

Технологии

Необходимые условия

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

Инструкции

Приложение может явно задать сведения о состоянии дня, отправив сообщение 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;

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

О контроллерах календаря месяца

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