Сообщения кнопки
Кнопка может отправлять сообщения в родительское окно, а родительское окно может отправлять сообщения на кнопку.
В этом разделе рассматриваются следующие разделы.
- Отправка сообщений в кнопки
- Обработка сообщений из кнопки
- Уведомления из кнопок
- Цветные сообщения кнопки
- Обработка сообщений по умолчанию кнопки
- Связанные статьи
Отправка сообщений в кнопки
Родительское окно может отправлять сообщения на кнопку в перекрываемом или дочернем окне с помощью функции SendMessage или отправлять сообщения на кнопку в диалоговом окне с помощью функций SendDlgItemMessage, CheckDlgButton, CheckRadioButton и IsDlgButtonChecked.
Приложение может использовать сообщение BM_GETCHECK для получения состояния проверка поля проверка или переключателя. Приложение также может использовать сообщение BM_GETSTATE для получения текущих состояний кнопки (состояние проверка, состояние push-уведомлений и состояние фокуса). Чтобы получить сведения о определенном состоянии, используйте битовую маску для возвращаемого значения состояния.
Сообщение BM_SETCHECK задает состояние проверка поля проверка или переключателя; сообщение возвращает ноль. Сообщение BM_SETSTATE задает состояние нажатия кнопки. Это сообщение также возвращает ноль. Сообщение BM_SETSTYLE изменяет стиль кнопки. Он предназначен для изменения стилей кнопки в типе (например, изменение поля проверка на автоматическое проверка поле). Он не предназначен для изменения между типами (например, изменение поля проверка на переключатель). Приложение не должно изменять кнопку с одного типа на другой.
Кнопка стиля BS_BITMAP или BS_ICON отображает растровое изображение или значок вместо текста. Сообщение BM_SETIMAGE связывает дескриптор с растровым изображением или значком с кнопкой. Сообщение BM_GETIMAGE извлекает дескриптор на растровое изображение или значок, связанный с кнопкой.
Приложение также может использовать сообщение DM_GETDEFID для получения идентификатора элемента управления кнопки по умолчанию в диалоговом окне. Приложение может использовать сообщение DM_SETDEFID для задания кнопки нажатия по умолчанию для диалогового окна.
Вызов функции CheckDlgButton или CheckRadioButton эквивалентен отправке сообщения BM_SETCHECK. Вызов функции IsDlgButtonChecked эквивалентен отправке сообщения BM_GETCHECK.
Обработка сообщений из кнопки
Уведомления с кнопки отправляются как WM_COMMAND или WM_NOTIFY сообщения. Сведения о том, какое сообщение используется, можно найти на справочной странице для каждого уведомления.
Дополнительные сведения об обработке сообщений см. в разделе "Управление сообщениями". См. также сообщения кнопок.
Уведомления из кнопок
Когда пользователь нажимает кнопку, его состояние изменяется, а кнопка отправляет коды уведомлений в виде сообщений WM_COMMAND в родительское окно. Например, элемент управления кнопкой push отправляет код уведомления BN_CLICKED всякий раз, когда пользователь выбирает кнопку. Во всех случаях (за исключением BCN_HOTITEMCHANGE), слово с низким порядком параметра wParam содержит идентификатор элемента управления, слово с высоким порядком wParam содержит код уведомления, а параметр lParam содержит дескриптор окна управления.
Ответ сообщения и родительского окна зависят от типа, стиля и текущего состояния кнопки. Ниже приведены коды уведомлений кнопок, которые приложение должно отслеживать и обрабатывать.
Код уведомления | Description |
---|---|
BCN_HOTITEMCHANGE | Мышь вошла или покинула клиентская область кнопки. |
BN_CLICKED | Пользователь щелкнул кнопку. |
BN_DBLCLK или BN_DOUBLECLICKED | Пользователь дважды щелкнул кнопку. |
BN_DISABLE | Кнопка отключена. |
BN_PUSHED или BN_HILITE | Пользователь нажал кнопку. |
BN_KILLFOCUS | Кнопка потеряла фокус клавиатуры. |
BN_PAINT | Кнопка должна быть окрашена. |
BN_SETFOCUS | Кнопка получила фокус клавиатуры. |
BN_UNPUSHED или BN_UNHILITE | Кнопка больше не нажимается. |
Кнопка отправляет коды уведомлений BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUS и BN_UNPUSHED только в том случае, если он имеет стиль BS_NOTIFY. BN_DBLCLK коды уведомлений отправляются автоматически для кнопок BS_USERBUTTON, BS_RADIOBUTTON и BS_OWNERDRAW. Другие типы кнопок отправляют BN_DBLCLK только в том случае, если они имеют стиль BS_NOTIFY . Все кнопки отправляют код уведомлений BN_CLICKED независимо от их стилей кнопки.
Для автоматических кнопок система изменяет состояние нажатия и закрашивает кнопку. В этом случае приложение обычно обрабатывает только коды уведомлений BN_CLICKED и BN_DBLCLK . Для кнопок, которые не являются автоматическими, приложение обычно реагирует на код уведомления, отправляя сообщение, чтобы изменить состояние кнопки. Сведения о отправке сообщений на кнопки см. в разделе "Отправка сообщений в кнопки".
Когда пользователь выбирает кнопку нарисованного владельца, кнопка отправляет родительское окно WM_DRAWITEM сообщение, содержащее идентификатор элемента управления, который будет вырисовываться, и сведения о его измерениях и состоянии.
Цветные сообщения кнопки
Система предоставляет значения цветов по умолчанию для кнопок. Приложение может получить значения по умолчанию для этих цветов, вызвав функцию GetSysColor или установив значения, вызвав функцию SetSysColors. В следующей таблице показаны значения цвета кнопки по умолчанию.
Значение | Цвет элемента |
---|---|
COLOR_BTNFACE | Лица кнопки. |
COLOR_BTNHIGHLIGHT | Выделите область (верхние и левые края) кнопки. |
COLOR_BTNSHADOW | Теневая область (нижние и правые края) кнопки. |
COLOR_BTNTEXT | Обычный (негрейный) текст в кнопках. |
COLOR_GRAYTEXT | Отключенный (серый) текст в кнопках. Этот цвет имеет значение 0, если текущий драйвер дисплея не поддерживает сплошной серый цвет. |
COLOR_WINDOW | Фоны окон. |
COLOR_WINDOWFRAME | Кадры окон. |
COLOR_WINDOWTEXT | Текст в окнах. |
Однако вызов SetSysColors влияет на все приложения, поэтому не следует вызывать эту функцию для настройки кнопок для приложения.
Система отправляет WM_CTLCOLORBTN сообщение в родительское окно кнопки перед рисованием кнопки. Это сообщение содержит дескриптор контекста устройства кнопки и дескриптор дочернего окна. Родительское окно может использовать эти дескрипторы для изменения текста и фона кнопки. Однако только нарисованные владельцем кнопки реагируют на родительское окно, обрабатывая сообщение.
Обработка сообщений по умолчанию кнопки
Процедура окна для предопределенного класса окна управления кнопкой выполняет обработку по умолчанию для всех сообщений, которые процедура управления кнопкой не обрабатывает. Когда процедура управления кнопкой возвращает значение FALSE для любого сообщения, предопределенная процедура окна проверка сообщения и выполняет действия по умолчанию, перечисленные в следующей таблице.
Message | Действие по умолчанию | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BM_CLICK | Отправляет кнопку WM_LBUTTONDOWN и сообщение WM_LBUTTONUP и отправляет родительское окно код уведомления BN_CLICKED. | ||||||||||||||||
BM_GETCHECK | Возвращает проверка состояние кнопки. | ||||||||||||||||
BM_GETIMAGE | Возвращает дескриптор растрового изображения или значка, связанного с кнопкой или ЗНАЧЕНИЕ NULL , если кнопка не имеет растрового изображения или значка. | ||||||||||||||||
BM_GETSTATE | Возвращает текущее состояние проверка, состояние принудительной отправки и фокус кнопки. | ||||||||||||||||
BM_SETCHECK | Задает состояние проверка для всех стилей переключателей и полей проверка. Если параметр wParam больше нуля для переключателей, кнопка получает стиль WS_TABSTOP. | ||||||||||||||||
BM_SETIMAGE | Связывает указанный точечный рисунок или дескриптор значка с кнопкой и возвращает дескриптор предыдущей растровой карты или значка. | ||||||||||||||||
BM_SETSTATE | Задает состояние нажатия кнопки. Для кнопок, нарисованных владельцем, сообщение WM_DRAWITEM отправляется в родительское окно, если состояние кнопки изменилось. | ||||||||||||||||
BM_SETSTYLE | Задает стиль кнопки. Если слово с низким порядком параметра lParam имеет значение TRUE, кнопка перезавернута. | ||||||||||||||||
WM_CHAR | Проверяет поле проверка или автоматическое проверка, когда пользователь нажимает клавиши plus (+) или равно (=). Очищает поле проверка или автоматическое проверка, когда пользователь нажимает клавишу минус (–). | ||||||||||||||||
WM_ENABLE | Рисует кнопку. | ||||||||||||||||
WM_ERASEBKGND | Удаляет фон для кнопок, нарисованных владельцем. Фоны других кнопок удаляются в рамках WM_PAINT и обработки WM_ENABLE. | ||||||||||||||||
WM_GETDLGCODE | Возвращает значения, указывающие тип входных данных, обработанных процедурой кнопки по умолчанию, как показано в следующей таблице.
|
||||||||||||||||
WM_GETFONT | Возвращает дескриптор текущего шрифта. | ||||||||||||||||
WM_KEYDOWN | Нажимает кнопку, если пользователь нажимает ПРОБЕЛ. | ||||||||||||||||
WM_KEYUP | Освобождает запись мыши для всех случаев, кроме клавиши TAB. | ||||||||||||||||
WM_KILLFOCUS | Удаляет прямоугольник фокуса из кнопки. Для кнопок push-уведомлений и кнопок нажатия по умолчанию прямоугольник фокуса недействителен. Если кнопка содержит запись мыши, запись освобождается, кнопка не щелкается и удаляется любое состояние принудительной передачи. | ||||||||||||||||
WM_LBUTTONDBLCLK | Отправляет код уведомления BN_DBLCLK в родительское окно для переключателей и кнопок, нарисованных владельцем. Для других кнопок дважды щелчок обрабатывается как сообщение WM_LBUTTONDOWN. | ||||||||||||||||
WM_LBUTTONDOWN | Выделяет кнопку, если позиция курсора мыши находится в прямоугольнике клиента кнопки. | ||||||||||||||||
WM_LBUTTONUP | Освобождает запись мыши, если кнопка имела запись мыши. | ||||||||||||||||
WM_MOUSEMOVE | Выполняет то же действие, что и WM_LBUTTONDOWN, если кнопка содержит запись мыши. В противном случае действие не выполняется. | ||||||||||||||||
WM_NCCREATE | Преобразует любую кнопку BS_OWNERDRAW в кнопку BS_PUSHBUTTON. | ||||||||||||||||
WM_NCHITTEST | Возвращает HTTRANSPARENT, если элемент управления кнопкой является полем группы. | ||||||||||||||||
WM_PAINT | Рисует кнопку в соответствии со своим стилем и текущим состоянием. | ||||||||||||||||
WM_SETFOCUS | Рисует прямоугольник фокуса на кнопке, получая фокус. Для переключателей и автоматических переключателей родительский окно отправляется BN_CLICKED код уведомления. | ||||||||||||||||
WM_SETFONT | Задает новый шрифт и при необходимости обновляет окно. | ||||||||||||||||
WM_SETTEXT | Задает текст кнопки. В случае с полем группы сообщение закрашивает перед переопределениям поля группы новым текстом. | ||||||||||||||||
WM_SYSKEYUP | Освобождает запись мыши для всех случаев, кроме клавиши TAB. |
Предопределенная процедура окна передает все остальные сообщения функции DefWindowProc для обработки по умолчанию.
См. также