Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
14
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

П. 4.5. Панель инструментов

Создание и использование панели инструментов очень похоже на ра­боту с акселераторами. Кнопки панели, как и акселераторы, связаны с командами. Подобно дескриптору таблицы акселераторов создается и де­скриптор таблицы кнопок. Отличие заключается в структуре кнопок, функции создания и форме отображения панели.

4.5.1. Создание панели инструментов

Для создания панели инструментов вызывают функцию

HWND CreateToolbarEx(HWND hwnd, DWORD ws, UINT wID,

int nBitmaps, HINSTANCE hBMInst, UINT wBMID,

LPCTBBUTTON lpButtons, int iNumButtons,

int dxButton, int dyButton, int dxBitmap, int dyBitmap,

UINT uStructSize);

Она создает окно панели инструментов и добавляет в него заданные кнопки.

Параметры функции:

1. hwnd - дескриптор родительского окна панели.

2. ws - стиль панели. Должен содержать константу WS_CHILD, часто дополняют константой TBSTYLE_TOOLTIPS.

3. wID - идентификатор панели инструментов.

4. nBitmaps - количество изображений кнопок в контейнере, храня­щемся в файле hBMInst под номером wBMID. Изображения кнопок (обычно формата ICO, размером 32x32, 16 цветов) хранятся в файлах EXE и DLL, упакованные по несколько штук в контейнерах, В одном файле может быть несколько контейнеров. Функция находит контей­неры по порядковому номеру, извлекает из них нужные изображения и выводит на кнопках.

5. bBMInst - дескриптор экземпляра приложения, содержащего кон­тейнер с кнопками.

6. wBMID - идентификатор запрашиваемого формата кнопки.

7. lpButtons - указатель на массив структур типа TBBUTTON, который содержит информацию о кнопках создаваемой панели инструментов.

8. iNumButtons - количество кнопок панели инструментов.

9. dxButton - ширина кнопок в пикселях.

10. dyButton - высота кнопок в пикселях.

11. dxBitmap - ширина изображения кнопки в пикселях.

12. dyBitmap - высота изображения кнопки в пикселях.

13. uStructSize - размер структуры TBBUTTON.

Если параметры dxButton, dyButton, dxBitmap и dyBitmap задать рав­ными 0, то размеры кнопок берутся по умолчанию.

В случае успешного создания панели функция возвращает дескрип­тор окна созданной панели инструментов, иначе - NULL.

Структура TBBUTTON содержит информацию о кнопке панели ин­струментов:

typedef struct {

int iBitmap;

int idCommand;

BYTE fsState;

BYTE fsStyle;

DWORD dwData;

int iString;

} TBBUTTON;

Назначение полей этой структуры:

1. iBitmap — номер изображения кнопки в контейнере.

2. idComraand - идентификатор связанный с кнопкой команды. Если fsStyle=TBSTYLE_SEP, то idCommand должен быть равен 0.

3. fsState - флажки состояния кнопки. В общем случае кнопки панели могут иметь комбинацию следующих состояний:

Константа

Состояние кнопки

TBSTATE_CHECKED

Кнопка стиля TBSTYLE_CHECK на­жата

TBSTATE ENABLED

Кнопка доступна

TBSTATE HIDDEN

Кнопка невидима и недоступна

TBSTATE INDETERMINATE

Кнопка недоступна

TBSTATE PRESSED

Кнопка нажата

TBSTATE_WRAP

Используют в комбинации с констан­той TBSTATE_ENABLED. Тогда следующая кнопка панели будет изо­бражена в начале очередной строки

Приложение может посылать панели инструментов сообщения TB_GETSTATE и TB_SETSTATE.

Сообщение TB_GETSTATE возвращает значение состояния кнопки панели (например, кнопка доступна, нажата или отмечена). При этом wParam приравнивают идентификатору команды кнопки, а lParam=0. В случае аварии возвращаемое значение равно -1.

Сообщение TB_SETSTATE устанавливает состояние кнопки панели. При этом wParam равен идентификатору команды кнопки, a lParam= (LPARAM)MAKELONG{fsState, 0) задает устанавливаемое состояние fsState. В случае аварии возвращаемое значение равно 0.

4. fsStyIe - стиль кнопки. Может быть комбинацией следующих кон­стант:

Константа

Стиль кнопки

TBSTYLE_TOOLTIPS

Кнопка посылает уведомительное сооб­щение WM_NOTIFY при остановке кур­сора мыши над ней на полсекунды

TBSTYLE WRAPABLE

Кнопки разместить в несколько линий

TBSTYLE BUTTON

Стандартная кнопка

TBSTYLE_CHECK

Кнопка, которая может находиться в на­жатом и ненажатом состояниях. В зави­симости от состояния кнопка отобража­ется различным цветовым фоном

TBSTYLE_CHECKGROUP

Группа кнопок стиля TBSTYLE_CHECK, только одна из которых Может находить­ся в нажатом состоянии

TBSTYLE GROUP

Группа стандартных кнопок

TBSTYLE SEP

Кнопки в виде малого промежутка

Кнопка стиля TBSTYLE_BUTTON ведет себя подобно cтандартной кнопке. Кнопка стиля TBSTYLE_CHECK также подобна стандартной кнопке, но после каждого нажатия переключается между нажатым и не нажатым состояниями. Можно создавать группу обычных кнопок (стиль TBSTYLE_GROUP) и группу переключаемых кнопок (стиль TBSTYLE_CHECKGROUP). В последней группе только одна кнопка может находиться в нажатом состоянии.

5. dwData - задаваемое приложением значение.

6. iString - номер строки кнопки.

Параметры dwData и iString чаще всего задают нулевыми.

Номера стандартных изображений иконок из файла commctrl.h:

#define STD_CUT 0

#define STD_COPY 1

#define STD_PASTE 2

#define STD_UNDO 3

#define STD_REDOW 4

#define STD_DELETE 5

#define STD_FILENEW 6

#define STD_FILEOPEN 7

#define STD_FlLESAVE 8

#define STD_PRINTPRE 9

#define STD_PROPERTIES 10

#define STD_HELP 11

#define STD_FIND 12

#define STD REPLACE 13

#define STD_PRINT 14

Доя кнопок можно использовать и другие изображения. В част­ности, можно самим построить изображения иконок.

Форматы кнопок:

#define IDB_STD_SMALL_COLOR 0

#define IDB_STD_LARGE_COLOR 1

#define IDB_VIEW_SMALL_COLOR 4

#define IDB_VIEW_LARGE_COLOR 5

#define IDB_HIST_SMALL_COLOR 8

#define IDB_HIST_LARGE_COLOR 9