
- •Глава 12 Современный пользовательский интерфейс
- •Основы элементов управления общего пользования
- •Инициализация библиотеки
- •Создание элементов управления общего пользования
- •Стили элементов управления общего пользования
- •Основные стили окна
- •Флаги расширенного стиля окна
- •Флаги основного стиля элемента управления общего пользования
- •Флаги стиля, специфичные для конкретного элемента управления
- •Посылка сообщений элементам управления общего пользования
- •Уведомляющие сообщения от элементов управления общего пользования
- •Элементы управления главного окна
- •Панели инструментов
- •Создание панели инструментов
- •Стили окна панели инструментов
- •Задание изображений на поверхности кнопок
- •Заполнение массива tbbutton
- •Пример создания панели инструментов
- •Перемещение и изменение размеров панели инструментов
- •Поддержка элемента управления подсказка
- •Добавление дочерних окон в панель инструментов
- •Резервирование места для дочернего окна на панели инструментов
- •Создание элементов управления на панели инструментов
- •Изменение размеров панели инструментов с дочерними окнами
- •Поддержка окон подсказки для дочерних окон панели инструментов
- •Изменение конфигурации панели инструментов
- •Строка состояния
- •Создание строки состояния
- •Перемещение и изменение размеров строки состояния
- •Поддержка просмотра меню
- •Просмотр элементов меню
- •Просмотр элементов всплывающего меню
- •Просмотр системного меню
- •Программа gadgets
Заполнение массива tbbutton
Создание панели инструментов требует определения конкретных параметров кнопок. Вам необходимо заполнить данными элементы массива TBBUTTON, которые определяют конкретные кнопки. После того, как панель инструментов создана, можно определить дополнительные кнопки путем посылки сообщения TB_ADDBUTTONS панели инструментов или вставить кнопки между существующими кнопками путем посылки сообщения TB_INSERTBUTTON.
TBBUTTON определяется в файле COMMCTRL.H следующим образом:
typedef struct _TBBUTTON
{
int iBitmap ;
int idCommand ;
BYTE fsState ;
BYTE fsStyle ;
BYTE bReserved[2] ;
DWORD dwData ;
int iString ;
} TBBUTTON ;
Обратите внимание, что это определение отличается от аналогичного, приведенного в файлах подсказки Win32, и не содержащего поля bReserved. При инициализации элементов структуры TBBUTTON следует определить два поля, связанные со всем массивом.
Поле iBitmap структуры TBBUTTON — это индекс (относительно нуля) изображения кнопки. При использовании битовых образов из библиотеки элементов управления общего пользования необходимо использовать константы STD_ и VIEW_ как значения в этом поле. В данной панели инструментов определяются собственные индексы изображений, в зависимости от порядка их включения в панель инструментов.
Поле idCommand структуры TBBUTTON — идентификатор команды, соответствующей кнопке. При нажатии кнопки она посылает сообщение WM_COMMAND с параметром wParam равным idCommand.
Поля fsState и fsStyle определяют начальное состояние и стиль кнопки. Последний не изменяется в течение всей жизни кнопки. Состояние кнопки устанавливается при ее создании и может быть изменено действиями пользователя или путем посылки сообщений панели инструментов. Ниже приведены пять стилей кнопок:
Стиль кнопки |
Описание |
TBSTYLE_BUTTON |
Кнопка ведет себя как стандартная кнопка (pushbutton). Кнопка может быть нажата, но не может оставаться в нажатом состоянии. |
TBSTYLE_SEP |
Разделитель для создания пространства между кнопками или для резервирования места для дочерних элементов управления (таких как комбинированный список). |
TBSTYLE_CHECK |
Кнопка ведет себя как флажок (check box). Каждый щелчок мыши изменяет состояние кнопки (нажата/отжата). |
TBSTYLE_GROUP |
Кнопка является членом группы кнопок типа переключателей (radio buttons). Кнопка остается нажатой до тех пор, пока не будет нажата другая кнопка из этой группы. |
TBSTYLE_CHECKGROUP |
Объединяет свойства стилей TBSTYLE_CHECK и TBSTYLE_GROUP. |
Пять стилей комбинируются для получения приблизительного эквивалента трех базовых типов кнопок диалоговых окон: кнопок, флажков, переключателей.
Ниже приведены шесть состояний кнопок:
Состояния кнопок |
Описание |
TBSTATE_CHECKED |
Кнопка стиля флажок находится в нажатом состоянии |
TBSTATE_PRESSED |
Кнопка любого стиля находится в нажатом состоянии |
TBSTATE_ENABLED |
Кнопка доступна (может реагировать на действия мышью) |
(продолжение)
Состояния кнопок |
Описание |
TBSTATE_HIDDEN |
Скрытая кнопка. (Такая кнопка не отображается и ее место занимают другие кнопки.) |
TBSTATE_INDETERMINATE |
Кнопка находится в неопределенном состоянии, отображается серым цветом, может быть нажата. |
TBSTATE_WRAP |
Кнопки панели инструментов стиля TBSTYLE_WRAPABLE, находящиеся после кнопки, имеющей это состояние, отображаются в новой строке. |
Каждое из этих состояний доступно для чтения и установки с помощью пары сообщений, специфичных для панели инструментов. Например, можно запросить, является ли конкретная кнопка доступной, путем посылки сообщения TB_ISBUTTONENABLED; посылая сообщение TB_ENABLEBUTTON можно сделать кнопку доступной или недоступной.
Поле dwData структуры TBBUTTON — это необязательное 4-х байтовое поле, предназначенное для использования. Например, вы можете сохранить в этом поле указатель на данные, специфические для этой кнопки. Возможно только однократная установка значения этого поля при создании кнопки. Вы можете получить значение из поля dwData путем посылки сообщения TB_GETBUTTON.
Поле iString структуры TBBUTTON — это индекс (относительно нуля) текстовой метки кнопки. Возможно добавление строк в список текстовых строк панели инструментов путем посылки сообщения TB_ADDSTRING.