- •Глава 12 Современный пользовательский интерфейс
- •Основы элементов управления общего пользования
- •Инициализация библиотеки
- •Создание элементов управления общего пользования
- •Стили элементов управления общего пользования
- •Основные стили окна
- •Флаги расширенного стиля окна
- •Флаги основного стиля элемента управления общего пользования
- •Флаги стиля, специфичные для конкретного элемента управления
- •Посылка сообщений элементам управления общего пользования
- •Уведомляющие сообщения от элементов управления общего пользования
- •Элементы управления главного окна
- •Панели инструментов
- •Создание панели инструментов
- •Стили окна панели инструментов
- •Задание изображений на поверхности кнопок
- •Заполнение массива tbbutton
- •Пример создания панели инструментов
- •Перемещение и изменение размеров панели инструментов
- •Поддержка элемента управления подсказка
- •Добавление дочерних окон в панель инструментов
- •Резервирование места для дочернего окна на панели инструментов
- •Создание элементов управления на панели инструментов
- •Изменение размеров панели инструментов с дочерними окнами
- •Поддержка окон подсказки для дочерних окон панели инструментов
- •Изменение конфигурации панели инструментов
- •Строка состояния
- •Создание строки состояния
- •Перемещение и изменение размеров строки состояния
- •Поддержка просмотра меню
- •Просмотр элементов меню
- •Просмотр элементов всплывающего меню
- •Просмотр системного меню
- •Программа gadgets
Стили окна панели инструментов
Основные свойства панели инструментов управляются с помощью установки флагов стиля окна. Разрешено совместное использование флагов основного стиля элементов управления общего пользования (CCS_) и флагов стиля, специфичных для панели инструментов (TBSTYLE_) (см. таблицу):
Категория |
Флаг стиля |
Описание |
Представление |
CCS_NODIVIDER |
Запрещает рисование разделительной линии над панелью инструментов |
|
TBSTYLE_WRAPABLE |
Поддерживает панели инструментов, состоящую из нескольких строк |
Автоматическое размещение по оси y |
CCS_TOP |
Помещает панель инструментов в верхнюю часть родительского окна (по умолчанию), выравнивая ширину по родительскому окну и высоту по размерам кнопки. |
|
CCS_BOTTOM |
Помещает панель инструментов в нижнюю часть родительского окна, выравнивая ширину по рабочей зоне родительского окна и высоту по размерам кнопки. |
(продолжение)
Категория |
Флаг стиля |
Описание |
|
CCS_NOMOVEY |
Устанавливает начальное положение по оси x (у левой границы родительского окна), но не устанавливает начальное положение по оси y, выравнивая ширину по рабочей зоне родительского окна и высоту по размерам кнопки. |
Запрещение автоматического перемещения и автоматического изменения размера |
CCS_NOPARENTALIGN |
Панель инструментов устанавливает свою высоту, но не положение и ширину. Для нормальной работы посылается сообщение для изменения размера после создания. |
|
CCS_NORESIZE |
Запрещает все автоматические перемещения и изменения размеров.Это запрещает следующие флаги стиля: CCS_TOP, CCS_BOTTOM, CCS_NOMOVEY и CCS_NOPARENTALIGN. Вы должны явно задать размеры и положение панели инструментов. |
Изменение конфигурации панели инструментов |
CCS_ADJUSTABLE |
Поддерживает использование левой кнопки мыши при нажатой клавише <Shift> для перемещения и двойной щелчок для вывода диалогового окна изменения конфигурации. (Более детально об изменении конфигурации панели инструментов читайте соответствующий раздел этой главы.) |
|
TBSTYLE_ALTDRAG |
Изменяет панель инструментов, имеющую стиль CCS_ADJUSTABLE так, что для перемещения кнопок вместо левой кнопки мыши и клавиши <Shift> используется клавиша <Alt> и левая кнопка мыши. |
Поддержка окон подсказки |
TBSTYLE_TOOLTIPS |
Строит элемент управления окно подсказки. |
При создании панели инструментов устанавливается по умолчанию только стиль CCS_TOP, что приводит к расположению панели инструментов в верхней части родительского окна. После этого, родительское окно может сделать запрос панели инструментов для изменения ее размеров и местоположения посредством посылки сообщения TB_AUTOSIZE, что обычно и делает родительское окно при обработке сообщения WM_SIZE. За исключением посылки сообщения с запросом об изменении размера панель инструментов с флагом CCS_TOP или CCS_BOTTOM достаточно самостоятельна и не требует другого обслуживания. Присутствие флагов стиля, которые запрещают свойства автоматического перемещения и автоматического изменения размеров панели инструментов, требует немного больших затрат для обслуживания панели инструментов при изменении размеров родительского окна.
Два флага стиля изменяют представление панели инструментов. Первый, CCS_NODIVIDER, удаляет разделительную линию, призванную отделить кнопки панели инструментов стиля CCS_TOP от меню приложения. Для панелей инструментов, отображаемых в других местах (таких как вторая панель инструментов, выводимая под первой), вероятно, потребуется спрятать разделительную линию. Это справедливо и для окон, имеющих панель инструментов, но не имеющих меню — эта разделительная линия будет плохо смотреться. Другой флаг стиля, относящийся к изменению представления панели инструментов, TBSTYLE_WRAPABLE позволяет переносить на другую строку кнопки панели инструментов. Без этого флага, кнопки, которые слишком длинные чтобы поместиться в одну линию, делаются невидимыми и становятся недоступными для пользователя.
Три флага стиля управляют перемещением относительно оси y: CCS_TOP (по умолчанию), CCS_BOTTOM и CCS_NOMOVEY. Эти флаги определяют, как будет расположена панель инструментов в ее родительском окне как при создании, так и при получении сообщения TB_AUTOSIZE. Флаг CCS_NOMOVEY делает возможным только приведение ширины (для полного использования рабочей области родительского окна), высоты и месторасположения относительно оси x, и оставляет на ваше усмотрение перемещение панели инструментов вдоль оси y, как при указании значений по оси y в вызове функции CreateWindow, так и при вызове функций типа MoveWindow после того, как панель инструментов будет создана. Панель инструментов с этим флагом была бы удобна в качестве второй панели инструментов, расположенной непосредственно под панелью инструментов с флагом CCS_TOP.
Два других флага стиля ограничивают возможности автоматического перемещения и автоматического изменения размеров панели инструментов. При использовании флага CCS_NOPARENTALIGN высота панели инструментов устанавливается в соответствии с высотой кнопок, но необходимо установить местоположение и ширину. Флаг CCS_NORESIZE полностью запрещает любое перемещение и изменение размеров панели инструментов. Этот флаг был бы полезным при использовании панели инструментов как элемента управления в диалоговом окне, когда она должна занимать указанную область без самостоятельного изменения размеров. Этот флаг был бы также полезен при установке двух и более панелей инструментов друг за другом в одной строке.
Флаг стиля CCS_ADJUSTABLE строит панель инструментов, которую пользователь может изменять "на лету". Кнопки могут быть перемещены в рамках панели инструментов или перетащены за панель инструментов с помощью клавиши <Shift> и левой кнопки мыши. Двойной щелчок левой кнопкой мыши приводит к вызову диалогового окна изменения конфигурации панели инструментов (Customize Toolbar dialog box) для добавления, удаления или перемещения кнопок. (Это диалоговое окно появляется и при получении панелью инструментов сообщения TB_CUSTOMIZE.) Изменение конфигурации требует от родительского окна реагирования на некоторые уведомляющие сообщения — TBN_QUERYINSERT и TBN_QUERYDELETE, посылаемые среди других панелью инструментов, которые запрашивают разрешение на вставку или удаление кнопок. Для панели инструментов с изменяемой конфигурацией флаг стиля TBSTYLE_ALTDRAG изменяет пользовательский интерфейс перемещения кнопок с сочетания клавиши <Shift> и левой кнопки мыши на сочетание клавиши <Alt> и левой кнопки мыши для тех случаев, когда первое сочетание используется в других целях.
Флаг стиля TBSTYLE_TOOLTIPS требует от панели инструментов создания элемента управления подсказка, который выводит маленькое окно с текстом для каждой кнопки. Родительское окно панели инструментов получает уведомление TTN_NEEDTEXT (в форме сообщения WM_NOTIFY), когда окну подсказки необходим текст для конкретной кнопки.
