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


Состояния кнопки

В этом разделе описывается изменение состояния кнопки и реагирование приложения.

Раздел состоит из следующих разделов:

Выбор кнопки

Пользователь может выбрать кнопку тремя способами: щелкнув ее мышью, наведя на нее вкладку, а затем нажав клавишу ВВОД, или (если кнопка является частью группы, определенной в стиле WS_GROUP), вкладыв на выбранную кнопку в группе и используя клавиши со стрелками для перемещения внутри этой группы. Два метода табуляции являются частью предопределенного интерфейса клавиатуры, предоставляемого системой. Полное описание этого интерфейса см. в диалоговых окнах.

При выборе кнопки обычно возникают следующие события:

  • Система дает кнопку фокуса клавиатуры.
  • Кнопка отправляет родительское окно сообщение, чтобы уведомить его о выборе.
  • Родительское окно (или система) отправляет кнопку, чтобы изменить его состояние.
  • Родительское окно (или система) переопределяет кнопку, чтобы отразить новое состояние.

Элементы состояния кнопки

Состояние кнопки может быть охарактеризовано его состоянием фокуса, состоянием принудительной отправки и проверкой состояния.

Состояние фокуса

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

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

Состояние push-отправки

Состояние принудительной передачи применяется к кнопке, флажку, переключателю или флажку с тремя состояниями, но не применяется к другим кнопкам. Состояние нажатия кнопки может быть отправлено или не отправлено. При нажатии кнопки (или любой кнопки с стилем BS_PUSHLIKE) кнопка нарисована как отложенная кнопка. Если он не нажимается, он рисуется как кнопка с поднятым. Если установлен флажок, переключатель или флажок с тремя состояниями, фон кнопки серый. Если он не нажимается, фон кнопки не серый.

Проверка состояния

Состояние флажка применяется к флажку, переключателю или флажку с тремя состояниями, но не применяется к другим кнопкам. Состояние можно установить, очистить или (для трех состояний) недетерминировано. Флажок установлен, если он содержит флажок и очищается, когда он не выполняется. Переключатель проверяется, когда он содержит черную точку; она очищается, когда она не выполняется. Флажок с тремя состояниями установлен, если он содержит флажок, очищается, когда он не выполняется, и определяется, когда он содержит серый прямоугольник. Система автоматически изменяет состояние проверки автоматической кнопки, но приложение должно изменить состояние проверки неавтомационной кнопки.

Изменения состояния кнопки

Когда пользователь выбирает кнопку, обычно необходимо изменить один или несколько элементов состояния кнопки. Система автоматически изменяет состояние фокуса для всех типов кнопок, состояние push-уведомлений для кнопок или кнопок со стилем BS_PUSHLIKE и состояние проверки для всех автоматических кнопок. Приложение должно вносить все другие изменения состояния, учитывая тип, стиль и текущее состояние кнопки. В следующем списке показаны элементы состояния, которые необходимо изменить для каждого типа кнопки:

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

Приложение может определить состояние кнопки, отправив ему сообщение BM_GETCHECK или BM_GETSTATE; Приложение может задать состояние кнопки, отправив ему BM_SETCHECK или BM_SETSTATE сообщение.