- •Лабораторный практикум «Основы разработки приложений 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. Локализация программных продуктов
- •Индивидуальные задания лабораторного практикума
Создание и показ окна
Для создания окна, в частности главного окна приложения, используется функция Windows CreateWindow(), требующая при вызове указания 11 параметров, описание которых можно найти в интерактивном справочнике; впрочем, назначение большей части этих параметров очевидно:
HWND hwnd=CreateWindow(szClassName,//Класс окна
szTitle, WS_OVERLAPPEDWINDOW,//Заголовок, стиль окна
10,10,300,100, //Координаты, размеры
HWND_DESKTOP,NULL,//Родитель, меню
hInst,NULL);//Дескриптор приложения, параметры
Передача функции CreateWindow()через первый параметр имени класса окна позволяет использовать при создании окна те его общие характеристики, которые были определены в структуреWNDCLASS, например форму курсора и цвет фона. Вызывая функциюCreateWindow()многократно, можно создать много окон данного класса, различающихся, например, размерами и местоположением на экране. Однако пока мы создаем только главное окно приложения, которое, очевидно, должно быть в одном экземпляре.
Второй параметр определяет адрес строки с заголовком, появляющейся в верхней части окна.
Третий параметр определяет стиль окна. С помощью стиля задаются такие характеристики окна, как вид окружающей его рамки, наличие или отсутствие строки заголовка и целый ряд других. Стиль представляет собой комбинацию большого количества констант, каждая из которых отвечает за тот или иной элемент оформления или свойство окна. Так, константа WSTHICKFRAMEпридает окну толстую рамку, константаWSSYSMENUснабжает окно системным меню, константаWSVSCROLLотвечает за появление в правой части окна линейки вертикальной прокрутки и т. д. Операция побитового ИЛИ (знак | ) позволяет “набрать” требуемый комплект свойств.
Обычно главное окно описывается составной константой WSOVERLAPPEDWINDOW, в которую входят элементы стиляWSOVERLAPPED(перекрывающееся окно),WSCAPTION(строка заголовка),WSSYSMENU(системное меню),WSTHICKFRAME(толстая рамка),WSMINIMIZEBOX(кнопка минимизации, т. е. свертывания окна в пиктограмму) иWSMAXIMIZEBOX(кнопка максимизации, т. е. развертывания окна на весь экран). Если требуется создать главное окно с меньшим количеством элементов, весь необходимый набор можно указать явным образом. Так, для создания главного окна без кнопки максимизации константа стиля должна быть такой:
WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX
(строка заголовка появляется в главном окне в любом случае, а константа WSOVERLAPPEDравна нолю, и ее указание не влияет на стиль).
С другой стороны, воспользовавшись операторами побитовых преобразований И (&) и НЕ (~), можно не набирать заново всю комбинацию констант, а просто исключить ненужный элементWSMAXIMIZEBOXиз полного набора:
WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX
Следующие четыре параметра определяют горизонтальную и вертикальную координаты левого верхнего угла окна относительно начала экрана, а также размеры окна по горизонтали и вертикали (в пикселах).
В качестве восьмого параметра указывается дескриптор родительского окна. Для главного окна, у которого нет родителя, используется константа HWNDDESKTOP, равная 0.
Следующий параметр позволяет задать меню окна. Если меню нет (как в нашем случае) или используется меню класса, заданное в структуре WNDCLASS, этот параметр должен быть равенNULL.
Десятый параметр идентифицирует экземпляр приложения. Значение дескриптора приложения было получено нами через аргумент hInstфункцииWinMain().
Последний параметр является адресом дополнительных данных, которые часто не требуются; соответственно мы указали “пустой” адрес (NULL).
Функция CreateWindow()возвращает (при успешном выполнении) дескриптор созданного окна. Этот дескриптор, поступающий в нашем примере в локальную переменнуюhwnd,передается затем в функциюShowWindow(), которая организует вывод созданного окна на экран. В качестве второго параметра этой функции указывается режим показа окна. Использованная в примере константаSWSHOWNORMALвыводит окно с теми размерами, которые указаны в параметрах функцииCreateWindow().
Создав главное окно приложения и выведя его на рабочий стол, необходимо организовать цикл обработки сообщений.