Поделиться через


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

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

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

снимок экрана окна с тремя кнопками на панели инструментов; одна кнопка является горячей

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

снимок экрана окна без визуальных стилей: ни одна из кнопок не выглядит горячей

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

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

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

Заметка

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

 

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

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

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

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

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

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

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

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

снимок экрана окна в Windows Vista с прозрачной панелью инструментов

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

Заметка

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

 

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

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

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

снимок экрана панели инструментов с текстом справа от каждого значка

Стиль панели инструментов TBSTYLE_LIST можно использовать в сочетании со стилем TBSTYLE_FLAT для создания панели инструментов с неструктурированными кнопками.

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

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

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

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

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

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

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

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

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

 

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

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

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

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

Использование TB_ADDSTRING не является единственным способом добавления строк на панель инструментов. Строку можно отобразить в кнопке, передав указатель строки в члене iString структуры TBBUTTON, который передается в TB_ADDBUTTONS. Кроме того, можно использовать TB_SETBUTTONINFO для назначения текста кнопке панели инструментов.

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

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

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

Заметка

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

 

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

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

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

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

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

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

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

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

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

#define ID_PASTE 100

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

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

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

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

Все кнопки на панели инструментов имеют одинаковый размер. Для функции CreateToolbarEx требуется задать начальный размер кнопок при создании панели инструментов. При использовании функции CreateWindowEx начальный размер устанавливается на размеры по умолчанию размером 24 на 22 пикселя. Вы можете использовать сообщение TB_SETBUTTONSIZE для изменения размера кнопки, но перед добавлением кнопок на панель инструментов необходимо сделать это. Сообщение TB_GETITEMRECT извлекает текущие размеры кнопок.

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

Включение кастомизации

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

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

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

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