
- •Глава 12 Современный пользовательский интерфейс
- •Основы элементов управления общего пользования
- •Инициализация библиотеки
- •Создание элементов управления общего пользования
- •Стили элементов управления общего пользования
- •Основные стили окна
- •Флаги расширенного стиля окна
- •Флаги основного стиля элемента управления общего пользования
- •Флаги стиля, специфичные для конкретного элемента управления
- •Посылка сообщений элементам управления общего пользования
- •Уведомляющие сообщения от элементов управления общего пользования
- •Элементы управления главного окна
- •Панели инструментов
- •Создание панели инструментов
- •Стили окна панели инструментов
- •Задание изображений на поверхности кнопок
- •Заполнение массива tbbutton
- •Пример создания панели инструментов
- •Перемещение и изменение размеров панели инструментов
- •Поддержка элемента управления подсказка
- •Добавление дочерних окон в панель инструментов
- •Резервирование места для дочернего окна на панели инструментов
- •Создание элементов управления на панели инструментов
- •Изменение размеров панели инструментов с дочерними окнами
- •Поддержка окон подсказки для дочерних окон панели инструментов
- •Изменение конфигурации панели инструментов
- •Строка состояния
- •Создание строки состояния
- •Перемещение и изменение размеров строки состояния
- •Поддержка просмотра меню
- •Просмотр элементов меню
- •Просмотр элементов всплывающего меню
- •Просмотр системного меню
- •Программа gadgets
Элементы управления главного окна
Три элемента управления общего пользования часто используются в главных окнах: панели инструментов, окна подсказки и строки состояния. На рис. 12.5 показаны примеры каждого из этих элементов управления, реализованных в программе GADGETS.
Рис. 12.5. Программа GADGETS, иллюстрирующая использование элементов управления общего пользования: панели инструментов, окна подсказки, строки состояния
Панели инструментов
Панель инструментов — это дочернее окно, обычно расположенное под меню программы, и состоящее из кнопок, соответствующих наиболее употребительным пунктам меню и опциям программы. Кнопки панели инструментов сами по себе не являются окнами, они являются графическими объектами, нарисованными с использованием битовых образов на поверхности окна панели инструментов.
Метками кнопок панели инструментов могут быть либо битовые образы, либо битовые образы с текстовыми метками. (Настоящая реализация не поддерживает кнопки только с текстовыми метками.) Панель инструментов устанавливает размеры всех кнопок одинаковыми, а размеры кнопок с текстовыми метками устанавливают такой величины, чтобы разместить наиболее длинную метку. Поэтому, следует выбирать короткие строки для текстовых меток, чтобы избежать слишком больших кнопок.
Кроме кнопок панель инструментов может содержать другие дочерние окна элементов управления, такие как окно комбинированного списка (combo box). Создаются встроенные элементы управления с помощью вызова функции CreateWindow при задании окна панели инструментов как родительского. Как указано в книге Nancy Cuts "Programming the Windows 95 User Interface", реальным препятствием для помещения элементов управления в панель инструментов является резервирование достаточно большого пиксельного пространства. В панели инструментов могут также содержаться разделители между кнопками и встроенными элементами управления. Так же как и случае меню, когда разделители определяются в описании меню специальным флагом SEPARATOR, так и в случае панели инструментов разделители кнопок строятся с использованием кнопок панели инструментов стиля TBSTYLE_SEP. Дюжина или примерно столько разделителей требуется для резервирования места для окна комбинированного списка в панели инструментов.
Создание панели инструментов
Панель инструментов создается либо путем вызова функции CreateWindow и задания имени класса TOOLBARCLASSNAME, либо путем вызова функции CreateToolbarEx, которая создает панель инструментов и инициализирует набор кнопок. Ниже приведен прототип функции CreateToolbarEx:
HWND CreateToolbarEx ( HWND hwnd, DWORD ws, UINT wID,
int nBitmaps, HINSTANCE hBMInst,
UINT wBMID, LPCTBBUTTON lpButtons,
int iNumButtons, int dxButton,
int dyButton, int dxBitmap,
int dyBitmap, UINT uStructSize ) ;
Первые три параметра используются в вызове функции CreateWindow, который осуществляет функция CreateToolbarEx: hwnd — это описатель родительского окна, ws — флаги стиля окна, wID — идентификатор дочернего окна панели инструментов.
Следующие три параметра используются для загрузки ресурса битового образа, который содержит рисунки всех кнопок (множество изображений упакованы в строку в один битовый образ): nBitmaps — число изображений в битовом образе, hBMInst и wBMID идентифицируют ресурс битового образа для загрузки.
Параметр lpButtons — это указатель на массив элементов типа TBBUTTON, iNumButtons — задает число элементов в массиве. Каждый элемент TBBUTTON определяет битовый образ, идентификатор команды, тип кнопки, ее начальное состояние.
Размер каждой кнопки основывается на базе размеров изображения битового образа (dxBitmap, dyBitmap). Минимальная ширина кнопки равна dxBitmap+7 пикселей, минимальная высота кнопки — dyBitmap+7 пикселей. Существует возможность задать значения dxBitmap и dyBitmap для установки размеров кнопок больше минимальных. Если необходимости в этом нет, то значения dxBitmap и dyBitmap устанавливаются равными нулю.
Вариант панели инструментов основывается на размере структуры TBBUTTON, который задается последним параметром uStructSize, и должен равняться sizeof (TBBUTTON).
При создании панель инструментов устанавливает свой размер и местоположение в "правильные" значения: высота устанавливается в соответствии с высотой кнопок, ширина устанавливается в соответствии с шириной рабочей области родительского окна. Панель инструментов размещается в верхней части родительского окна. Заставить панель инструментов изменить эти установки можно только путем модификации стилей окна. Как это делать — описано в следующем разделе.