Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования для информатиков и инженеров. Часть 2 Прикладное программирование в Windows.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
603.45 Кб
Скачать

10.2. Подключение и инициализация общих элементов управления

 

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

Прежде чем использовать любой из этих элементов, приложение должно вызвать функцию InitCommonControls(), которая загружает динамическую библиотеку общих элементов управления (DLL) и инициализирует их подсистему. Прототип этой функции имеет следующий вид:

Void InitCommonControls(void);

Наилучшее место для вызова функции InitCommonControls() – непосредственно после регистрации класса главного окна в функции WinMain().

Необходимо отметить одно важное свойство общих элементов управления: все они являются порожденными окнами. Они могут быть созданы одним из трех способов: с помощью вызова функций CreateWindow() или CreateWindowEx(), либо при помощи специальной функции API, создающей соответствующий элемент управления. (Функция CreateWindowEx() позволяет задать расширенный стиль для создаваемого окна.) Поскольку общие элементы управления являются окнами, они ведут себя и управляются преимущественно так же, как все остальные окна, создаваемые программой.

Большинство общих элементов управления при воздействии на них посылают программе сообщение WM_COMMAND либо WM_NOTIFY. Многими из них можно управлять программно, направляя им сообщения с помощью функции API SendMessage(), имеющей следующий прототип:

 

     LRESULT SendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam);

 

     Здесь hwnd представляет дескриптор элемента управления, Msg – это сообщение, которое Вы хотите ему направить, a wParam и lParam – параметры этого сообщения. Функция возвращает ответ элемента управления (если ответ требуется).

 

10.3. Работа с панелью инструментов

 

Вероятно, самым распространенным общим элементом управления является панель инструментов (toolbar), которая представляет собой не что иное, как графическое меню (возможно, с некоторыми дополнительными свойствами). Команды меню в панели инструментов представляются в виде небольших изображений, имеющих форму кнопок. Часто такая панель может использоваться вместе с обычным меню. Таким образом, панель инструментов представляет собой альтернативный способ выбора команд меню.

Для создания панели инструментов используется функция CreateToolbarEx():

 

HWND CreateToolbarEx(HWND hwnd, DWORD dwStyle,

                     WORD ID, int NumButtons,  

                     HINSTANCE hInst, WORD BPID,

                     LPCTBBUTTON Buttons,

                     int NumButtons, int ButtonWidth,

                     int ButtonHeight, int BMPWidth,

                     int BMPHeight, UINT Size);

 

Здесь параметр hwnd задает дескриптор родительского окна панели инструментов. Стиль окна панели инструментов задается параметром dwStyle. Кроме стиля WS_CHILD, он может включать и другие стандартные стили, такие как WS_BORDER или WS_VISIBLE.

Имеются еще два стиля, задаваемых для панели инструментов, которые могут Вас заинтересовать. Один из них, с именем TBSTYLE_TOOLTIPS, позволяет использовать подсказки панели инструментов – tooltips (они будут рассмотрены ниже). Другой специфичный для панели инструментов стиль, называе­мый TBSTYLE_WRAPABLE, обеспечивает возможность отображения длинных пане­лей инструментов (с большим количеством кнопок) в несколько строк.     

Параметр ID задает идентификатор панели инструментов. Количество кнопок в панели инструментов задается параметром NumButtons. Параметр hInst передает дескриптор текущего экземпляра приложения. Идентификатор ресурса растрового изоб­ражения, из которого формируются изображения кнопок, передается в параметре BPID.

Информация о каждой кнопке передается в массиве структур типа TBBUTTON, указатель на который должен содержаться в параметре Buttons. Параметр NumButtons задает количество кнопок в панели инструментов. Ширина и высота кнопок опре­деляется параметрами ButtonWidth и ButtonHeight. Если ButtonWidth и ButtonHeight имеют нулевые значения, размеры кнопок подбираются автоматически исходя из размеров изображения на них. Размер структуры TBUTTON передается в параметре Size. Функция возвращает дескриптор окна панели инструментов.

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

 

typedef struct _TBBUTTON

   {

   int iBitmap;

   int idCommand;

   BYTE fsState;

   BYTE fsStyle;

   DWORD dwData;

   int iString;

   }

      TBBUTTON;

 

Поле iBitmap определяет индекс изображения, связанного с кнопкой (этот индекс, в свою очередь, определяет смещение в исходном ресурсе растра, начиная с которого рисуется изображение в кнопке). Индексы начинаются с 0.

Поле idCommand определяет команду, ассоциированную с кнопкой. При нажатии кнопки родительское окно получает сообщение WM_COMMAND. В младшем слове параметра wParam этого сообщения содержится значение idCommand.

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

 

Таблица 10.2