Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе показано, как задать сведения о состоянии дня. Элемент управления календарем на месяц использует информацию о статусе дня для определения того, как он отображает определенные дни в элементе управления.
Элементы управления календарем месяца, использующие стиль 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;
Связанные разделы
-
Справочник по элементу управления календарём за месяц