Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
43-70_otvety_na_teplogo.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
87.53 Кб
Скачать

46. Кнопки флажки checkbox, autocheckbox, 3state, auto3state их назначение. Создание кнопок в окне приложения, сообщения от кнопок. Управление кнопками со стороны приложения.

Флажки (check boxes) представляют из себя маленькие квадратные окна с текстом. В программах флажки обычно объединяются, что дает пользователю возможность установить опции. Флажки, как

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

Существуют следущие стили флажков: CHECKBOX, AUTOCHECKBOX, 3STATE, AUTO3STATE.

При использовании стиля BS_CHECKBOX нужно самостоятельно устанавливать контрольную метку, посылая сообщение BM_SETCHECK. Параметр wParam устанавливается в 1 для установки контрольной метки и в 0 для ее удаления. Можно получить текущее состояние флажка, посылая управляющее сообщение BM_GETCHECK. Имеется возможность использовать следующие инструкции для переключения метки Х при обработке сообщения WM_COMMAND:

SendMessage((HWND)lParam, BM_SETCHECK,(WPARAM)

!SendMessage((HWND)lParam, BM_GETCHECK, 0, 0),0);

Следует обратить внимание на операцию ! перед вторым вызовом функции SendMessage. Значение параметра lParam является описателем дочернего окна, переданным в вашу оконную процедуру сообщением WM_COMMAND. Если позже понадобится узнать состояние кнопки, следует послать ей другое сообщение BM_GETCHECK. Можно также сохранять текущее состояние контрольной метки в статической переменной внутри своей оконной процедуры. Также можно инициализировать флажок BS_CHECKBOX меткой Х, посылая ему сообщение BM_SETCHECK:

SendMessage(hwndButton, BM_SETCHECK, 1, 0);

При стиле BS_AUTOCHECKBOX флажок сам включает или выключает контрольную метку. Наша оконная процедура может игнорировать сообщения WM_COMMAND. Если необходимо текущее состояние кнопки, следует послать сообщение BM_GETCHECK:

iCheck =(int) SendMessage(hwndButton, BM_GETCHECK, 0, 0);

Значение iCheck равно TRUE (не равно 0), если кнопка помечена, FALSE (или 0), если нет.

Теперь рассмотрим флажки BS_3STATE и BS_AUTO3STATE. Как показывают их имена, эти стили

могут отображать третье состояние — серый цвет внутри окна флажка — которое имеет место, когда посылается сообщение BM_SETCHECK с параметром wParam равным 2. Серый цвет показывает пользователю, что его выбор неопределен или не имеет отношения к делу. В этом случае флажок не может быть включен — т. е. он запрещает какой-либо выбор в данный момент. Однако, флажок продолжает посылать сообщения родительскому окну, если щелкать на нем мышью.

Окно флажка помещается в левой части и в центре относительно верхней и нижней сторон прямоугольника, который был задан при вызове функции CreateWindow. Щелчок мыши в любом месте внутри прямоугольника вызывает посылку родительскому окну сообщения WM_COMMAND. Минимальная высота флажка равна высоте символа. Минимальная ширина равна количеству символов в тексте плюс два.

47. Кнопки-переключатели radiobutton, autoradiobutton их назначение. Создание кнопок в окне приложения, сообщения от кнопок. Управление кнопками со стороны приложения.

Переключатели (radio buttons) похожи на флажки, но их форма не квадратная, а круглая. Жирная точка внутри кружка показывает, что переключатель помечен. Переключатель имеет стиль окна BS_RADIOBUTTON или BS_AUTORADIOBUTTON, но последний используется только в окнах диалога. В окнах диалога группы переключателей, как правило, используются для индикации нескольких взаимоисключающих опций. В отличие от флажков, если повторно щелкнуть на переключателе, его состояние не изменится. При получении сообщения WM_COMMAND от переключателя, необходимо отобразить его отметку, отправив сообщение BM_SETCHECK с параметром wParam, равным 1:

SendMessage(hwndButton, BM_SETCHECK, 1, 0);

Для всех остальных переключателей этой группы можно отключить контрольную метку, послав сообщение. BM_SETCHECK с параметром wParam, равным 0:

SendMessage(hwndButton, BM_SETCHECK, 0, 0);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]