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