Сведения о элементах управления панелью инструментов

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

На следующем снимке экрана показано окно, содержащее простую панель инструментов для операций с файлами. В приложении включены визуальные стили. Кнопка "Сохранить" является "горячей", так как курсор наведен на него при снимке экрана. Фактический вид элемента управления зависит от операционной системы и выбранной пользователем темы.

screen shot of a window with a three-button toolbar; one button is hot

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

screen shot of a window without visual styles: none of the buttons looks hot

В следующих разделах рассматриваются функции, которые следует учитывать при планировании панели инструментов. Дополнительные сведения о реализации и примере кода см. в разделе "Использование элементов управления панелью инструментов".

Указание размера и позиции панели инструментов

Если вы создаете панель инструментов с помощью CreateToolbarEx, функция позволяет указать в пикселях высоту и ширину панели инструментов.

Примечание.

Использование CreateToolbarEx не рекомендуется, так как не поддерживает новые функции панелей инструментов, включая списки изображений. Дополнительные сведения о создании панелей инструментов см. в разделе "Использование элементов управления панелью инструментов".

 

Функция CreateWindowEx не имеет параметров для указания размера панели инструментов. Процедура окна панели инструментов автоматически задает размер и положение окна панели инструментов. Высота зависит от высоты кнопок на панели инструментов. Ширина совпадает с шириной клиентской области родительского окна. Чтобы изменить параметры автоматического размера, отправьте сообщение ТБ_SEТБ UTTONSIZE. CCS_TOP и CCS_BOTTOM распространенные стили элементов управления определяют, находится ли панель инструментов в верхней или нижней части клиентской области. По умолчанию панель инструментов имеет стиль CCS_TOP .

Кроме того, процедура окна панели инструментов автоматически настраивает размер панели инструментов при получении сообщения WM_SIZE или ТБ_AUTOSIZE. Приложение должно отправлять любое из этих сообщений всякий раз, когда размер родительского окна изменяется или после отправки сообщения, требующего настройки размера панели инструментов, например сообщения ТБ_SEТБ UTTONSIZE.

Поведение размера и размещения панели инструментов по умолчанию можно отключить, задав CCS_NORESIZE и CCS_NOPARENTALIGN распространенные стили элементов управления. Элементы управления панели инструментов, размещенные элементами управления перестроек, должны задать эти стили, так как размеры элементов управления перестроек и расположение панели инструментов.

Прозрачные панели инструментов

Элементы управления панели инструментов поддерживают прозрачный внешний вид, позволяющий клиентской области под панелью инструментов отображаться. Существует два типа прозрачных панелей инструментов, которые имеют плоские кнопки и те, с трехмерными кнопками. Если вы хотите, чтобы приложение соответствовало интерфейсу Windows, используйте неструктурированный прозрачный стиль панели инструментов.

На следующем снимке экрана показаны два типа прозрачных панелей инструментов, а не визуальные стили.

screen shot of two windows with different styles of toolbars, but both toolbars are transparent

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

screen shot of a window in windows vista with a transparent toolbar

Чтобы создать прозрачную панель инструментов, необходимо добавить ТБSTYLE_FLAT или ТБSTYLE_TRANSPARENT в параметр стиля окна CreateWindowEx. Если вы не хотите, чтобы строка отображалась в нижней части панели инструментов, не используйте стиль окна WS_BORDER .

Примечание.

При использовании визуальных стилей панели инструментов могут быть неструктурированными по умолчанию.

 

Панели инструментов стилей списка

Кнопки панели инструментов позволяют отображать как текст, так и растровые изображения. Кнопки на панели инструментов, созданной с помощью стиля ТБSTYLE_LIST, помещать текст справа от растрового рисунка, а не под ним.

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

screen shot of a toolbar with text to the right of each icon

Стиль панели инструментов ТБSTYLE_LIST можно использовать в сочетании со стилем ТБSTYLE_FLAT для создания панели инструментов с неструктурированными кнопками.

Определение изображений кнопок

Существует два способа указать изображения для кнопок — по растровым изображениям или спискам изображений. Приложение должно выбрать используемый метод. Он не может использовать оба метода с одинаковым элементом управления панели инструментов. Обратите внимание, что функция CreateToolbarEx использует метод растрового изображения. Приложения, которые хотят использовать метод списка изображений, должны использовать функцию CreateWindowEx для создания элемента управления панели инструментов.

Определение изображений кнопок с помощью растровых изображений

Каждая кнопка на панели инструментов может включать битовое изображение. Панель инструментов использует внутренний список для хранения сведений, необходимых для рисования изображений. При вызове функции CreateToolbarEx можно указать монохромную или цветовую растровую карту, содержащую начальные изображения, а панель инструментов добавляет сведения во внутренний список изображений. Дополнительные изображения можно добавить позже с помощью сообщения ТБ_ADDBITMAP.

Каждый образ имеет отсчитываемый от нуля индекс. Первый образ, добавленный во внутренний список, имеет индекс 0, второй образ имеет индекс 1 и т. д. ТБ_ADDBITMAP добавляет изображения в конец списка и возвращает индекс первого нового изображения, который он добавил. Чтобы связать изображение с кнопкой, необходимо отправить сообщение ТБ_ADDBUTTONS и указать индекс изображения после добавления растровых изображений в список внутренних изображений.

В Windows предполагается, что все битовые изображения панели инструментов имеют одинаковый размер. Вы указываете размер при создании панели инструментов с помощью CreateToolbarEx. Если вы используете функцию CreateWindowEx для создания панели инструментов, размер изображений устанавливается на размеры по умолчанию размером 16 на 15 пикселей. Чтобы изменить размеры битовых изображений, можно использовать сообщение ТБ_SEТБ ITMAPSIZE, но перед добавлением изображений во внутренний список необходимо сделать это.

Определение изображений кнопок с помощью списков изображений

Вы также можете хранить изображения кнопок в наборе списков изображений. Список изображений — это коллекция изображений одного размера, каждая из которых может ссылаться на его индекс. Списки изображений используются для управления большими наборами значков или растровых изображений. Для отображения кнопок в различных состояниях можно использовать до трех разных списков изображений, как показано в следующей таблице.

State Description
Норм. Кнопки в их состоянии по умолчанию.
высокая Кнопки, расположенные под указателем или нажатием. Горячие элементы поддерживаются только в элементах управления панели инструментов с ТБSTYLE_FLAT стилем.
Выключено Кнопки, которые отключены.

 

После уничтожения панели инструментов приложения должны освободить все созданные списки изображений.

Определение текста для кнопок

Каждая кнопка может отображать строку в дополнение к изображению или вместо нее. Панель инструментов поддерживает внутренний список, содержащий все строки, доступные для кнопок панели инструментов. Строки добавляются во внутренний список с помощью сообщения ТБ_ADDSTRING, указывающего адрес буфера, содержащего строки для добавления. Каждая строка должна быть прервана null, и последняя строка должна быть завершена двумя символами NULL.

Каждая строка имеет отсчитываемый от нуля индекс. Первая строка, добавленная во внутренний список строк, имеет индекс 0, вторая строка имеет индекс 1 и т. д. ТБ_ADDSTRING добавляет строки в конец списка и возвращает индекс первой новой строки. Индекс строки используется для связывания строки с кнопкой.

Использование ТБ_ADDSTRING не является единственным способом добавления строк на панель инструментов. Строку можно отобразить в кнопке, передав указатель строки в элементе iString структуры ТБ BUTTON, передаваемой в ТБ_ADDBUTTONS. Кроме того, можно использовать ТБ_SEТБ UTTONINFO для назначения текста кнопке панели инструментов.

Добавление кнопок панели инструментов

Если для создания панели инструментов используется функция CreateToolbarEx, можно добавить кнопки на панель инструментов, заполнив массив структур ТБ BUTTON и указав адрес массива в вызове функции. Однако функция CreateWindowEx не имеет параметра для передачи структуры ТБ BUTTON. CreateWindowEx создает пустую панель инструментов, которую вы заполняете, отправляя сообщение ТБ_ADDBUTTONS, указывая адрес структуры ТБ BUTTON.

После создания панели инструментов можно добавить кнопки, отправив сообщение ТБ_INSERТБ UTTON или ТБ_ADDBUTTONS. Каждая кнопка описывается структурой ТБ BUTTON, которая определяет атрибуты кнопки, включая индексы строки и растрового изображения, а также его стиль, состояние, идентификатор команды и 32-разрядное значение.

Примечание.

Если для создания панели инструментов используется функция CreateWindowEx, перед добавлением кнопок необходимо отправить сообщение ТБ_BUTTONSTRUCTSIZE. Сообщение передает размер структуры ТБ BUTTON на панель инструментов.

 

Стили кнопки панели инструментов

Стиль кнопки определяет, как отображается кнопка и как она реагирует на входные данные пользователя. Например, стиль BTNS_BUTTON создает кнопку панели инструментов, которая ведет себя как стандартная кнопка нажатия. Кнопка с BTNS_CHECK стилем похожа на стандартную кнопку нажатия, за исключением того, что она переключается между нажатием и непечатанными состояниями каждый раз, когда пользователь щелкает его.

Вы можете создавать группы кнопок панели инструментов, которые действуют как переключатели, с помощью стиля BTNS_GROUP или BTNS_CHECKGROUP. Это приводит к тому, что кнопка остается нажимаемой, пока пользователь не выберет другую кнопку в группе. Группа определяется как непрерывная коллекция кнопок, все с BTNS_GROUP или стилем BTNS_CHECKGROUP.

Стиль BTNS_SEP создает небольшой разрыв между кнопками или рисует дреть между кнопками на неструктурированных панелях инструментов. Кнопка с стилем BTNS_SEP не получает входных данных пользователя.

В версии 5.80 распространенных элементов управления появились новые стили кнопок панели инструментов и переименованы некоторые из старых стилей. Теперь все флаги стиля кнопки начинаются с BTNS_XXX вместо ТБSTYLE_XXX. Описание и обсуждение стилей кнопки см. в разделе "Стили элементов управления и кнопки".

Состояния кнопки панели инструментов

Каждая кнопка на панели инструментов имеет состояние. Панель инструментов обновляет состояние кнопки для отражения действий пользователя, таких как нажатие кнопки. Состояние указывает, нажата ли кнопка в настоящее время или не нажимается, включена или отключена, скрыта или видна. Хотя приложение задает начальное состояние кнопки при добавлении кнопки на панель инструментов, оно может изменить и получить состояние, отправив ТБ_GETSTATE и ТБ_SETSTATE сообщения на панель инструментов. Список состояний кнопки панели инструментов см. в разделе "Состояния панели инструментов".

Идентификатор команды

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

#define ID_PASTE 100

Когда пользователь выбирает кнопку, панель инструментов отправляет родительское окно WM_COMMAND или WM_NOTIFY сообщение, включающее идентификатор команды кнопки. Родительское окно проверяет идентификатор команды и выполняет команду, связанную с кнопкой. Сведения о том, когда элементы управления отправляют сообщения WM_COMMAND и когда они отправляют WM_NOTIFY, см. в разделе "Примечания" документации по WM_NOTIFY.

Размер и позиция кнопки

Панель инструментов отслеживает ее кнопки, назначая каждой кнопке индекс позиции. Индекс равен нулю; То есть в левой кнопке имеется индекс 0, следующая кнопка справа имеет индекс 1 и т. д. Приложение должно указать индекс кнопки при отправке сообщений для получения сведений о кнопке или задания атрибутов кнопки.

Панель инструментов обновляет индексы позиции по мере вставки и удаления кнопок. Приложение может получить текущий индекс позиции кнопки с помощью сообщения ТБ_COMMANDTOINDEX. Сообщение указывает идентификатор команды кнопки, а окно панели инструментов использует идентификатор для поиска кнопки и возврата его индекса позиции.

Все кнопки на панели инструментов имеют одинаковый размер. Функция CreateToolbarEx требует задать начальный размер кнопок при создании панели инструментов. При использовании функции CreateWindowEx начальный размер устанавливается на размеры по умолчанию размером 24 на 22 пикселя. Чтобы изменить размер кнопки, можно использовать сообщение ТБ_SEТБ UTTONSIZE, но перед добавлением к панели инструментов всех кнопок необходимо сделать это. Сообщение ТБ_GETITEMRECT извлекает текущие измерения кнопок.

При добавлении строки, которая больше любой строки на панели инструментов, панель инструментов автоматически сбрасывает ширину кнопок. Ширина устанавливается для размещения самой длинной строки на панели инструментов.

Включение настройки

На панели инструментов есть встроенные функции настройки, которые можно сделать доступным для пользователя, предоставив панели инструментов CCS_ADJUSTABLE общий стиль управления. Функции настройки позволяют пользователю перетащить кнопку на новую позицию или удалить ее, перетащив с панели инструментов. Кроме того, пользователь может дважды щелкнуть панель инструментов, чтобы открыть диалоговое окно Настройка панели инструментов , которое позволяет пользователю добавить, удалить и переупорядочить кнопки панели инструментов. Чтобы отобразить диалоговое окно, используйте сообщение ТБ_CUSTOMIZE. Приложение определяет, доступны ли функции настройки пользователю и управляют степенью настройки, в которой пользователь может настроить панель инструментов.

В процессе настройки приложения часто нуждаются в сохранении и восстановлении состояния панели инструментов. Например, многие приложения хранят состояние панели инструментов, прежде чем пользователь начнет настраивать панель инструментов, если пользователь позже хочет восстановить панель инструментов в исходном состоянии. Элемент управления панели инструментов не сохраняет запись о его состоянии предустановки. Чтобы восстановить его, приложение должно сохранить состояние панели инструментов. Дополнительные сведения см. в разделе "Использование элементов управления панелью инструментов".

Включение горячего отслеживания

Горячее отслеживание означает, что при перемещении указателя по элементу внешний вид кнопки изменяется. Если визуальные стили включены, панели инструментов поддерживают горячее отслеживание по умолчанию. В противном случае только элементы управления панели инструментов, созданные с помощью стиля ТБSTYLE_FLAT, поддерживают горячее отслеживание. Другие стили окон можно использовать в сочетании с ТБSTYLE_FLAT для создания панелей инструментов, которые позволяют отслеживать горячее отслеживание, но имеют другой внешний вид с плоской панели инструментов. Дополнительные сведения см. в разделе "Использование элементов управления панелью инструментов".