
- •Глава 12 Современный пользовательский интерфейс
- •Основы элементов управления общего пользования
- •Инициализация библиотеки
- •Создание элементов управления общего пользования
- •Стили элементов управления общего пользования
- •Основные стили окна
- •Флаги расширенного стиля окна
- •Флаги основного стиля элемента управления общего пользования
- •Флаги стиля, специфичные для конкретного элемента управления
- •Посылка сообщений элементам управления общего пользования
- •Уведомляющие сообщения от элементов управления общего пользования
- •Элементы управления главного окна
- •Панели инструментов
- •Создание панели инструментов
- •Стили окна панели инструментов
- •Задание изображений на поверхности кнопок
- •Заполнение массива tbbutton
- •Пример создания панели инструментов
- •Перемещение и изменение размеров панели инструментов
- •Поддержка элемента управления подсказка
- •Добавление дочерних окон в панель инструментов
- •Резервирование места для дочернего окна на панели инструментов
- •Создание элементов управления на панели инструментов
- •Изменение размеров панели инструментов с дочерними окнами
- •Поддержка окон подсказки для дочерних окон панели инструментов
- •Изменение конфигурации панели инструментов
- •Строка состояния
- •Создание строки состояния
- •Перемещение и изменение размеров строки состояния
- •Поддержка просмотра меню
- •Просмотр элементов меню
- •Просмотр элементов всплывающего меню
- •Просмотр системного меню
- •Программа gadgets
Пример создания панели инструментов
Ниже приведен пример создания панели инструментов с маленькими (16х16) изображениями кнопок, взятыми из стандартного битового образа, поддерживаемого библиотекой элементов управления общего пользования:
HWND hwndToolBar = CreateToolbarEx ( hwndParent,
WS_CHILD | WS_VISIBLE |
WS_CLIPSIBLINGS | CCS_TOP |
TBSTYLE_TOOLTIPS,
1, 0,
HINST_COMMCTRL,
IDB_STD_SMALL_COLOR,
tbb,
5, 0, 0, 0, 0,
sizeof (TBBUTTON) ) ;
Тринадцать параметров функции CreateToolbarEx позволяют ей построить дочернее окно панели инструментов, загрузить простой битовый образ, содержащий изображения кнопок, создать пять кнопок, запросить поддержку окон подсказки и установить предполагаемую версию окна панели инструментов.
Ниже приведен массив TBBUTTON, необходимый для определения атрибутов конкретных кнопок панели инструментов:
TBBUTTON tbb[] =
{
STD_FILENEW, 1, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0, 0, 0,
STD_FILEOPEN, 2, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0, 0, 0,
STD_FILESAVE, 3, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0, 0, 0,
STD_PRINT, 4, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0, 0, 0,
STD_PRINTPRE, 5, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0, 0, 0
} ;
Альтернативой вызову функции CreateToolbarEx для создания панели инструментов может быть вызов функции CreateWindow и последующая посылка сообщений для инициализации различных аспектов панели инструментов. Ниже приведен код, который выполняет действия, аналогичные приведенному выше вызову функции CreateToolbarEx.
HWND hwndToolBar = CreateWindow ( TOOLBARCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE |
WS_CLIPSIBLINGS | CCS_TOP |
TBSTYLE_TOOLTIPS,
0, 0, 0, 0,
hwndParent,
(HMENU) 1,
hInst,
0 ) ;
// устанавливаем версию как размер структуры TBBUTTON
ToolBar_ButtonStructSize ( hwndToolBar ) ;
ToolBar_AddBitmap ( hwndToolBar, 1, &tbbitmap ) ;
// создаем кнопки
ToolBar_AddButtons ( hwndToolBar, 5, tbb ) ;
Требуется дополнительное определение данных типа структуры TBADDBITMAP, которые задают описатель экземпляра и идентификатор ресурса битового образа панели инструментов:
TBADDBITMAP tbbitmap =
{
HINST_COMMCTRL, IDB_STD_SMALL_COLOR
} ;
После создания панели инструментов, она посылает своему родительскому окну сообщения WM_COMMAND при нажатии на кнопку. Кроме обработки этих сообщений требуется программа для изменения размеров панели инструментов при изменении размеров родительского окна.
Перемещение и изменение размеров панели инструментов
Свойства панели инструментов автоматического изменения размеров и автоматического размещения начинают работать, когда панели инструментов посылается сообщение TB_AUTOSIZE. Обычно, это сообщение посылается тогда, когда родительское окно панели инструментов изменяет размер, т. е. получает сообщение WM_SIZE:
SendMessage ( hwndToolBar, TB_AUTOSIZE, 0, 0L ) ;
Вместо этого возможно использование макроса, определенного в файле COMCTHLP.H на прилагающемся компакт-диске:
ToolBar_AutoSize ( hwndToolBar ) ;
Реакция панели инструментов на это сообщение определяется флагами ее стиля. Например, панель инструментов стиля CCS_TOP или ССS_BOTTOM устанавливает свое местоположение и размеры. С другой стороны, панель инструментов стиля CCS_NORESIZE игнорирует это сообщение, и требует явной установки ее местоположения и размеров.