Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ТРПС.doc
Скачиваний:
13
Добавлен:
15.11.2018
Размер:
810.5 Кб
Скачать

8.2.8.4. Кнопки-переключатели

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

При создании переключателей функцией CreateWindow() можно использовать следующие дополнительные стили:

BS_AUTOCHECKBOX

Переключатель, который может находиться только в двух состояниях: включено и выключено.

BS_AUTO3STATE

Переключатель, который может находиться в трех состояниях: включено, выключено и неактивно.

BS_AUTORADIOBUTTON

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

8.2.8.5. Сообщение от переключателей

Родительское окно получает от переключателей ранее рассмотренное сообщение BN_CLICKED в составе WM_COMMAND.

8.2.8.6. Сообщение от родительского окна к переключателям

1. Родительское окно с дескриптором hWnd может запросить состояние переключателя, который имеет идентификатор nID, через сообщение BM_GETCHECK. Например:

int k=SendDlgItemMessage(hWnd,nID,BM_GETCHECK,0,0);

Возвращается одно из следующих состояний переключателя:

BST_CHECKED включен; BST_UNCHECKED выключен; BST_INDETERMINATE неопределенное состояние.

Последний код ответа может иметь только переключатель, для которого был определен стиль BS_AUTO3STATE.

2. Родительское окно может изменить состояние переключателя, посылая ему сообщение BM_SETCHECK, значение wParam параметра которого должно принимать одну из указанных выше величин, а параметр lParam не используется и должен быть равен нулю.

8.2.9. Структура drawitemstruct

Структура DRAWITEMSTRUCT используется при отрисовке пунктов меню, а также для некоторых элементов управления (см. поле CtlType в приведенной ниже таблице), которые имеют стиль OWNERDRAW. Как уже было сказано, этот стиль сообщает Windows, что отрисовку необходимых элементов приложение берет под свой контроль. Обязанностью Windows остается заполнение полей структуры, которая содержит информацию, что и как нужно перерисовать. После этого указатель на структуру передается в функцию родительского окна для обработки. Заметим, что оконная функция будет получать столько сообщений WM_DRAWITEM, сколько пунктов требуется перерисовать. Перечислим допустимые значения для полей структуры:

CtlType

Определяет тип элемента управления, который имеет стиль OWNERDRAW:

ODT_MENU меню; ODT_BUTTON кнопка; ODT_LISTBOX обычный список; ODT_LISTVIEW расширенный список (Win32); ODT_COMBOBOX комбинированный список; ODT_STATIC статический текст; ODT_TAB набор закладок (Win32).

CtlID

идентификатор элемента управления. Не используется для меню.

itemID

номер пункта меню или элемента списков, которые требуют перерисовки.

itemAction

Определяет тип перерисовки:

ODA_DRAWENTIRE перерисовка всего пункта; ODA_FOCUS пункт имеет фокус ввода; ODA_SELECT пункт является выбранным.

itemState

Состояние пункта:

ODS_DEFAULT обычное состояние; ODS_FOCUS имеет фокус ввода; ODS_GRAYED недоступен (только для меню); ODS_DISABLED недоступен (только для меню); ODS_CHECKED отмечен (только для меню); ODS_SELECTED выбран (только для меню).

hwndItem

Дескриптор элемента управления. Не используется для меню.

hDC

Дескриптор контекста отображения.

rcItem

Структура RECT, ограничивающая прямоугольную область, которая требует перерисовки.

itemData

Двойное слово, ассоциированное с данным пунктом.