Операционная система Windows 95 для программиста

       

Описание кнопок


Далее вы должны создать массив структур TBBUTTON , который описывает кнопки и разделители между группами кнопок. В этом массиве необходимо зарезервировать по одной структуре для каждой кнопки и для каждого разделителя групп кнопок.

В файле commctrl.h находится такое определение структуры TBBUTTON:

typedef struct _TBBUTTON { int iBitmap; int idCommand; BYTE fsState; BYTE fsStyle; DWORD dwData; int iString; } TBBUTTON, NEAR * PTBBUTTON, FAR * LPTBBUTTON; typedef const TBBUTTON FAR * LPCTBBUTTON;

В поле iBitmap каждой структуры массива необходимо записать номер кнопки (нумерация начинается с нуля). Для разделителя в этом поле следует указать нулевое значение.

В поле idCommand вы должны записать идентификатор, который будет передаваться родительскому окну с сообщением WM_COMMAND, когда пользователь нажмет соответствующую кнопку. Если элемент массива структур TBBUTTON описывает разделитель группы кнопок, в поле idCommand вам нужно записать нулевое значение.

Поле fsState должно содержать флаг исходного состояния кнопки:



Флаг Описание
TBSTATE_ENABLED Кнопка находится в разблокированном состоянии. Если этот флаг не установлен, кнопка заблокирована и отображается серым цветом
TBSTATE_CHECKED Кнопка изображается в нажатом состоянии. Этот флаг используется для кнопок с фиксацией
TBSTATE_HIDDEN Скрытая кнопка, не отображается
TBSTATE_INDETERMINATE Кнопка отображается серым цветом
TBSTATE_PRESSED Кнопка изображается в нажатом состоянии
TBSTATE_WRAP Кнопки, расположенные после той, что имеет флаг TBSTATE_WRAP, отображаются на новой строке. Таким образом, вы можете создать многострочный Toolbar . Этот флаг можно указывать только тогда, когда установлен флаг TBSTATE_ENABLED

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

После того как Toolbar будет создан, приложение может изменять состояние кнопки, посылая окну Toolbar сообщение TB_SETSTATE. Позже мы перечислим сообщения, которые можно посылать окну Toolbar.


Теперь займемся полем fsStyle. Как видно из названия, в это поле нужно записать стиль кнопки. Здесь вы можете использовать комбинацию следующих стилей:


Стиль кнопки Описание
TBSTYLE_BUTTON Стандартная кнопка
TBSTYLE_CHECK Кнопка с фиксацией. Эта кнопка "залипает", когда пользователь нажимает на нее. Для того чтобы вернуть кнопку в исходное состояние, необходимо нажать на нее еще раз
TBSTYLE_CHECKGROUP Кнопка с фиксацией, которая остается нажатой до тех пор, пока нажата другая кнопка из этой же группы
TBSTYLE_GROUP Стандартная кнопка, которая остается нажатой до тех пор, пока нажата другая кнопка из этой же группы
TBSTYLE_SEP Разделитель между группами кнопок

Через поле dwData можно передать дополнительные данные, которые будут хранится в описании кнопки и использоваться при необходимости. Вы можете записать в это поле нулевое значение.
И, наконец, в поле iString можно записать номер текстовой строки, которую необходимо написать на поверхности кнопки. Для добавления таких строк к внутреннему списку Toolbar необходимо послать сообщение TB_ADDSTRING , передав вместе с ним адрес буфера с текстовыми строками. Все строки в этом буфере должны быть закрыты двоичным нулем, а последняя - двумя двоичными нулями.
Если текстовые строки не используются, в поле iString следует записать нулевой значение.
Вот образец подготовленного массива структур TBBUTTON, описывающий восемь кнопок и три разделителя между ними:
TBBUTTON tbButtons[] = { { 0, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, { 1, ID_FILE_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, { 2, ID_FILE_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, { 3, ID_EDIT_CUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, { 4, ID_EDIT_COPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, { 5, ID_EDIT_PASTE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, { 6, ID_FILE_PRINT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0}, { 7, ID_HELP_ABOUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0} };

Содержание раздела