Описание кнопок
Далее вы должны создать массив структур 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} };