К простейшим органам управления относятся кнопки и переключатели.
Кнопка («Button»)
Обычно используется для осуществления каких-либо немедленных действий, без переключения или включения/выключения различных опций.
Переключатели «И» («Check box»)
Используются как переключатели опций «Вкл/Выкл». Характерная их особенность состоит в том, что будучи объединенными в группу, они реализуют логику «И», т.е. на нескольких таких переключателях пользователь может установить любую комбинацию соответствующих опций. Переключатели этого типа могут быть также «трехпозиционными», где третьим состоянием является отключение возможности какого-либо выбора в данный момент.
Переключатели «ИЛИ» («Radio button»)
Используются как переключатели опций «Вкл/Выкл». Однако, будучи объединенными в группу, они реализуют логику «ИЛИ», т.е. из нескольких опций пользователь может выбрать одну (ранее сделанный выбор автоматически сбрасывается).
Вокруг этих трех основных типов имеется некоторое количество вариаций. Приведем краткое табличное описание стандартных классов кнопок и переключателей, определенных в Microsoft Windows:
BS_DEFPUSHBUTTON
Определяет кнопку с жирной рамкой. Этот класс кнопок обычно используется тогда, когда обозначаемое действие является действием по умолчанию (подразумевается). На кнопке может быть выведен любой текст.
BS_PUSHBUTTON
То же, что и BS_DEFPUSHBUTTON, однако, обозначаемое действие не является действием по умолчанию.
BS_CHECKBOX
Этот стиль определяет маленький квадратик, который может иметь два состояния: отмеченное («checked» - квадратик отмечен крестиком) и неотмеченное («unchecked» - квадратик пуст). В момент отметки рамка квадратика выделяется жирной линией.
BS_AUTOCHECKBOX
То же что и BS_CHECKBOX, однако, состояние кнопки при отметке отслеживается автоматически.
BS_RADIOBUTTON
Определяет небольшую круглую кнопку, обозначаемую окружностью, которая может быть отмечена «нажатой» (внутри окружности появляется жирная точка). Справа от кнопки располагается любой текст, обозначающий действие.
BS_AUTORADIOBUTTON
То же что и BS_RADIOBUTTON, но при отметке кнопки пользователем ранее сделанная отметка автоматически снимается, и приложение получает сообщение BN_CLICKED.
BS_3STATE
То же что и BS_CHECKBOX, однако, орган управления имеет три состояния. Два первых (отмечен/не отмечен) остаются, а третье состояние (обозначаемое штриховкой кнопки) используется обычно для отображения того факта, что в настоящий момент обозначаемое кнопкой действие или свойство не действительно.
BS_AUTO3STATE
То же что и BS_3STATE, однако, смена состояний поддерживается автоматически.
BS_OWNERDRAW
Орган управления, определяемый пользователем. Функция родительского окна получает сообщения о действиях пользователя над органом управления. По этим сообщениям пользователь обязан отображать орган управления (при создании окна диалога), инвертировать его (в момент нажатия) и т.п.
BS_USERBUTTON
Стиль, промежуточный между BS_PUSHBUTTON и BS_OWNERDRAW, однако, при выборе пользователем этого органа управления область, где пользователь отображает свою кнопку, автоматически выделяется пунктирной рамкой.
BS_GROUPBOX
Этот стиль определяет не орган управления, а стилевой элемент - автоматически отображаемую тонкую рамку, охватывающую другие органы управления. Тем самым пользователю дается понять, что объекты, расположенные внутри рамки, тесно связаны между собой (обычно это стили BS_CHECKBOX и BS_RADIOBUTTON). В правом верхнем углу рамки может располагаться поясняющий текст.
BS_LEFTTEXT
Этот флаг используется для выравнивания текста по левой стороне кнопок BS_RADIOBUTTON и BS_CHECKBOX. Используется только с этими стилями. В параметре lParam этого сообщения указывается дескриптор органа управления как дочернего окна и код нотификации, служащий для определения того, какое же собственно действие произвел пользователь с кнопкой, а в параметре wParam-идентификатор органа управления.
Перечислим стандартные коды нотификации Windows, определенные в файле windows.h:
BN_CLICKED 0
BN_PAINT 1
BN_HILITE 2
BN_UNHILITE 3
BN_DISABLE 4
BN_DOUBLECLICKED 5
Коды нотификации могут понадобиться только при работе с кнопками, определяемыми пользователем. При работе со стандартными кнопками используется только код BN_CLICKED и реже BN_DOUBLECLICKED.
При непосредственной работе с кнопкой к ней переходит фокус ввода, т.е. вся нажатия клавиш на клавиатуре направляются функции кнопки. Однако стандартные функции кнопок игнорируют все нажатия клавиш за исключением клавиш пробел, которая имеет тот же эффект , что и нажатие на левую кнопку мыши.