- •Лабораторный практикум «Основы разработки приложений Windows» Книга 1
- •Часть 1. Теоретические сведения4
- •Часть 2. Лабораторный практикум95
- •Часть 1 Теоретические сведения
- •1. Структура приложения Windows Простейшая программа с главным окном
- •Структура программы
- •Главная функция WinMain()
- •Регистрация класса окна
- •Создание и показ окна
- •Сообщения Windows и цикл их обработки
- •Оконная функция
- •Макрос handle_msg и структурирование программы
- •2. Интерфейс графических устройств
- •Простая программа, использующая средства gdi
- •Обработка сообщений wmpaint
- •Контекст устройства
- •Использование графических инструментов
- •3. Ресурсы: меню Простая программа с меню
- •Файл ресурсов
- •Описание меню в файле ресурсов
- •Сообщение wmcommand
- •Программное создание меню
- •Плавающее меню
- •Инструментальная панель
- •Всплывающие подсказки
- •0,"Первая строка"
- •1,"Вторая строка"
- •2,"Третья строка"
- •4. Ресурсы: диалоговые окна
- •Простая программа с меню и диалогом
- •Описание диалога в файле ресурсов
- •Обслуживание модального диалога
- •Модальный диалог как главное окно приложения
- •Немодальный диалог
- •Список в диалоговом окне
- •Окно редактирования и статический элемент управления
- •Графика в диалоговом окне
- •Перекрашивание диалогового окна и его элементов
- •Часть 2 Лабораторный практикум Работы лабораторного практикума Работа 1. Вызов функций Windows
- •Работа 2. Главное окно приложения (пример 1-1 из настоящего пособия)
- •Работа 3. Вывод в главное окно приложения текста и фигур (пример 2-1 из настоящего пособия)
- •Работа 4.Вывод в главное окно приложения текста и фигур (индивидуальное задание а)
- •Работа 5. Меню и модальный диалог (пример 4-1 из настоящего пособия)
- •Работа 6.Меню (индивидуальное задание в)
- •Работа 7.Модальный диалог в качестве главного окна приложения (индивидуальное задание с)
- •Работа 8.Вывод графика в главное окно приложения (индивидуальное заданиеD)
- •Работа 9. Немодальный диалог
- •Работа 10. Диалог с окном редактирования
- •Работа 11. Программное создание меню
- •Работа 12. Плавающее меню
- •Работа 13. График в диалоговом окне
- •Работа 14. Инструментальная панель (tool bar)
- •Работа 15. Инструментальная панель со всплывающими подсказками (tool tips)
- •Работа 16. Пользовательские пиктограммы и курсоры
- •Работа 17. Локализация программных продуктов
- •Индивидуальные задания лабораторного практикума
Инструментальная панель
Дальнейшего улучшения внешнего вида приложения можно добиться, включив в состав главного окна, наряду с линейкой меню (или вместо нее), инструментальную панель, которая представляет собой набор кнопок с рисунками, действующих точно так же, как и пункты обычного меню. Эти кнопки могут дублировать отдельные команды меню, но могут и дополнять их. На рис. 3.6 показана часть главного окна среды программирования Borland C++ со строкой заголовка, линейкой обычного меню (File, Edit и т. д.) и инструментальной панелью с пиктограммами стандартных действий (чтение и сохранение файла, компиляция, выполнение и т. д.).

Рис. 3.6. Обычное меню и инструментальная панель
Для создания инструментальной панели необходимо прежде всего подготовить файл с растровым изображением рисунков на кнопках (в формате .BMP). Могут быть разные варианты размещения кнопок (вплотную друг к другу, с промежутками, группами и т. д.). Обычно кнопки имеют размер 1616 пикселов, и тогда для размещения на инструментальной панели, например, трех кнопок, нужно создать растровое изображение размером 1648 пикселов (рис. 3.7). Разумеется, рисунки на кнопках могут быть цветными.
![]()
Рис. 3.7. Изображение трех кнопок для инструментальной панели
Поскольку изображение кнопок будет выступать у нас в качестве ресурса, в файл ресурсов необходимо включить ссылку на файл с изображением кнопок, например, таким образом:
ID_BTNS BITMAP "BTNS.BMP"
Здесь ID_BTNS –произвольная символическая константа, которая затем будет использоваться в качестве идентификатора данного ресурса, аBTNS.BMP – имя файла с изображением кнопок.
Действия по программной организации инструментальной панели удобно выполнить в функции OnCreate(). Здесь прежде всего создается (и обнуляется) структурная переменная – массив из трех (по числу кнопок) структур типаTBBUTTON.Эта структура описана в заголовочном файлеCOMMCTRL.H, который не подсоединяется автоматически, поэтому в начало программы необходимо включить директиву
#include <commctrl.h>.
Структура TBBUTTONсодержит шесть элементов, из которых нас будут интересовать всего три:
idBitmap– порядковый номер кнопки (кнопки нумеруются от 0);
idCommand– идентификатор кнопки (определенная заранее символьная константа);
fsState– состояние кнопки. ЗначениеTBSTATEENABLED разрешает управление с помощью данной кнопки.
После заполнения перечисленных выше элементов во всех трех (если кнопок три) членах нашего массива следует вызвать функцию Windows CreateToolbarEx(), указав в качестве ее параметров:
дескриптор главного окна;
стиль инструментальной панели (значение WSVISIBLE);
идентификатор всей инструментальной панели, который в программе не используется и может быть равен, например, -1;
число изображений кнопок в файле .BMP;
дескриптор приложения;
идентификатор ресурса с изображением кнопок;
адрес массива структур типа TBBUTTON;
число кнопок;
ширину и высоту каждой кнопки;
ширину и высоту изображения на каждой кнопке (размеры кнопок и изображений на них в принципе могут не совпадать);
размер структуры TBBUTTON, определяемый с помощью функции С++sizeof().
При нажатии кнопки инструментальной панели Windows посылает в приложение сообщение WMCOMMAND, которое приводит к вызову функцииOnCommand() с передачей через второй параметр этой функции значения идентификатора нажатой кнопки.Обычно в функцииOnCommand() предусматривают конструкциюswitch-case, с помощью которой организуют анализ значения идентификатора и выполнение запланированных действий. Если при этом в приложении имеются и обычное меню, и инструментальная панель, то при назначении пунктам меню и кнопкам инструментальной панели одинаковых идентификаторов они будут дублировать друг друга, если же идентификаторы будут разными, то с помощью меню можно управлять одними характеристиками приложения, а с помощью инструментальной панели – другими.
