Создание проекта типа Win32-application

Страницы работы

Содержание работы

Задание 1. Проект типа Win32-application

1.  Создайте пустой (empty) проект типа Win32-application.

Перепишите в созданную AppWizard-ом папку проекта заготовку – файл lab3_1.cpp и подключите его к проекту.
Проверьте работу заготовки: в программе создается стандартное окно с заголовком. Окно содержит системное меню и стандартные кнопки минимизации, максимизации и закрытия приложения. Обратите внимание на эллипс, который при изменении размеров окна «вписывается» в клиентскую область.

2.  Утилита Spy

Запустите приложение и одновременно запустите утилиту Spy++ (Tools/Spy++). Посмотрите: сколько и каких сообщений поступает окну приложения

3.  Модифицируйте заготовку.

Пользуясь справочной системой и описанием (Практика_1) измените следующие элементы Вашего приложения по Вашему вкусу. Рекомендация – внеся очередное изменение, посмотрите на результат.

1)  Иконка:
а) из предоставляемых ОС
б) создайте специфическую иконку

2)  Курсор
а) из предоставляемых ОС
б) создайте специфическую иконку

3)  фон окна:

a) – сплошной (попробуйте как стандартные кисти, предоставляемые Windows, так и Ваши собственные кисти – CreateSolidBrush() )

              б)– с помощью CreateHatchBrush()

4)  заголовок окна – например: “Это окно Полубенцевой М.И.!”

5)  стили окна (введитескроллинг, сделайте так, чтобы невозможно было изменить размеры окна, попробуйте создать окно без возможности максимизации-минимизации…)

6)  начальное расположение окна:      

              а) в параметрах функции CreateWindow– например, по центру экрана или в любой четверти экрана

Подсказка: для того, чтобы определить размерности экрана, пользуйтесь функцией GetSystemMetrics():

               int nWidth = GetSystemMetrics(SM_CXSCREEN); //ширина экрана

              int nHeight = GetSystemMetrics(SM_CYSCREEN); //высота экрана

              б)параметром функции ShowWindow - изначально максимизированное или минимизированное окно

4.  Обработчики сообщений

Обратите внимание на мою заготовку оконной процедуры. В данном приложении существенным является:

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

Для примера приведены макросы – взломщики сообщений для WM_SIZE и WM_PAINT.

4.1.  WM_PAINT

Попробуйте изменить размеры окна – подумайте, почему эллипс все время «вписывается» в клиентскую область окна? Поэкспериментируйте с обработчиком WM_PAINT. Используя дескриптор контекста устройства, выведите в окно какой-либо текст или нарисуйте что-нибудь свое.
Функции вывода текста – TextOut и DrawText

Функции рисования фигур – Ellipse, FillRect…

4.2.  WM_SIZE

Раскомментируйте фрагмент обработчика сообщения WM_SIZE. При изменении размеров окна наблюдайте изменение текста заголовка окна.

4.3.  Сообщения Мыши

По аналогии с приведенными обработчиками введите в Вашу оконную процедуру:
а) обработку сообщения WM_RBUTTONDOWN. Пусть в том месте клиентской области Вашего окна, где click-нута мышь, что-нибудь выводится
б) обработку сообщения WM_MOUSEMOVE. Пусть при поступлении очередного сообщения WM_MOUSEMOVE рисуется маленький кружок вокруг точки курсора мыши

Подсказка: для того, чтобы узнать каким образом должен выглядеть Ваш обработчик (какие параметры принимает функция), загляните в файл windowsx.h, найдите (find) требуемое сообщение и «позаимствуйте» закомментированное объявление функции.

4.4.  Создание дочерних окон. WM_CREATE

В вашем окне создайте кнопку (а лучше две). Подсказка: самое лучшее место для этого – обработчик WM_CREATE (который тоже нужно ввести в Ваше приложение). Для этого используйте уже приведенную ранее при создании основного окна фукцию CreateWindow.

Подсказка 1:получить требуемый в качестве параметра при создании окна дескриптор Вашего приложения можно:

              HINSTANCE hInst = (HINSTANCE)GetClassLong(hwnd,GCL_HMODULE);

Подсказка 2: стили окна для создания стандартной кнопки WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON

5.  Обработчики командных сообщений. Сообщение WM_COMMAND

Так как сообщения WM_COMMAND могут поступать от разных дочерних элементов управления, при выборе пунктов меню, а также при трансляции нажатия акселераторов, в общем случае в обработчике WM_COMMAND следует предусмотреть анализ – какое именно пришло командное сообщение и “от кого”.

Для того, чтобы наблюдать реакцию на нажатие кнопки, предлагаю следующие варианты (импровизация поощряется):

1)  измените цвет фона окна. Для этого научитесь работать с API-функцией SetClassLong(). Подсказка – для того, чтобы увидеть результат, окно нужно перерисовать.

2)  выведите окно сообщения (message box) с помощью API-функции MessageBox()

6.  Создание POP-UP окон (сравнение всплывающих и дочерних окон)

1) Создайте еще одну кнопку. В обработчике нажатия этой кнопки создайте пользовательское POP-UP окно. Подумайте: что еще нужно предусмотреть для функционирования такого окна

2) Создайте еще одну кнопку. В обработчике нажатия этой кнопки измените взаимоотношения между главным окном приложения и созданным POP-UP окном следующим образом – с помощью SetParent сделайте POP-UP окно дочерним.

3) Создайте еще одну кнопку. В обработчике нажатия этой кнопки восстановите изначальные взаимоотношения между главным окном приложения и POP-UP окном с помощью SetParent

7.  Ресурсы приложения

С помощью графического редактора создайте ресурс-меню. В созданное меню введите пункт, при выборе которого должен вызываться стандартный диалог для задания цвета.

Похожие материалы

Информация о работе