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


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

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

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

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

screen shot of a dialog box with a month calendar control showing two months, side by side

Примечание.

Внешний вид и поведение элемента управления календарем месяца немного отличается в разных версиях библиотеки времени выполнения. В этом разделе основное внимание уделяется элементу управления, как оно отображается в Windows Vista с версией 6 Comctl32.dll.

 

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

  • Текущая дата отображается в отдельной строке в нижней части элемента управления. Это стиль по умолчанию.
  • "Сегодня круг" (фактически прямоугольник в этой версии) появляется вокруг текущего дня, а рядом с линией "Сегодня" в качестве визуального подсказки. Это стиль по умолчанию.
  • Номера недели отображаются слева от каждой строки дней. Этот стиль должен быть указан.
  • Некоторые даты отображаются полужирным шрифтом в соответствии с состоянием дня, заданным приложением. Например, даты с запланированными собраниями могут отображаться полужирным шрифтом. Этот стиль должен быть указан.

Примечание.

Windows не поддерживает даты до 1601 года. Дополнительные сведения см. в разделе FILETIME.

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

 

Выбор дня

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

Для перемещения выделения можно также использовать следующие команды клавиатуры. Календарь всегда прокручивается по мере необходимости, чтобы отобразить выбранный день. (The Коды виртуальных ключей отображаются в таблице.)

Команда Description
Стрелка влево (VK_LEFT) Выберите предыдущий день.
Стрелка вправо (VK_RIGHT) Выберите следующий день.
Стрелка вверх (VK_UP) Выберите тот же день за предыдущую неделю.
Стрелка вниз (VK_DOWN) Выберите тот же день на следующей неделе.
PAGE UP (VK_PRIOR) Выберите тот же день в предыдущем месяце. (Если этот месяц не имеет дня, ближайший день выбран, например, выбор перемещается с 31 марта по 28 февраля или 29.)
PAGE DOWN (VK_NEXT) Выберите тот же день в следующем месяце.
HOME (VK_HOME) Выберите первый день текущего месяца.
END (VK_END) Выберите последний день текущего месяца.
CTRL +HOME Прокрутите месяц назад и выберите день в левом столбце.
CTRL+END Прокрутите месяц вперед и выберите день в правом столбце.
CTRL+PAGE UP Выберите тот же день в предыдущем месяце. Количество месяцев, по которым перемещается выбор, — это количество месяцев, отображаемых в элементе управления. Например, если отображается два месяца, выбор будет переходить с 6 июня по 6 мая.
CTRL+PAGE DOWN Выберите тот же день в предыдущем месяце. Количество месяцев, по которым перемещается выбор, — это количество месяцев, отображаемых в элементе управления. Например, если отображается два месяца, выбор будет переходить с 6 июня по 6 августа.

 

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

Приложение может изменить количество месяцев, за счет которых элемент управления обновляет его отображение с помощью сообщения MCM_SETMONTHDELTA или соответствующего макроса, MonthCal_SetMonthDelta. Однако ключи PAGE UP и PAGE DOWN изменяют выбранный месяц на один, независимо от количества отображаемых месяцев или значения, заданного MCM_SETMONTHDELTA.

Выбор неаджацентного месяца

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

screen shot of a dialog box with a month calendar control showing all the months of 2007 and 2008

Выбор другого года

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

screen shot of a month calendar control showing all years from 1999 to 2020

Локализация

Элемент управления "Календарь месяца" получает его формат и все строки из LOCALE_USER_DEFAULT.

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

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

Message Description
MCM_SETCURSEL Элемент управления копирует поля времени без проверки или изменения.
MCM_SETRANGE Проверяются поля времени переданных структур. Если они допустимы, поля времени копируются без изменения. Если они недопустимы, элемент управления копирует поля времени из сегодняшних данных.
MCM_SETSELRANGE Проверяются поля времени переданных структур. Если они допустимы, поля времени копируются без изменения. Если они недопустимы, элемент управления сохраняет поля времени из текущих диапазонов выбора.
MCM_SETTODAY Элемент управления копирует поля времени без проверки или изменения.

 

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