Перепишите в созданную AppWizard-ом
папку проекта заготовку – файл lab3_1.cpp
и подключите его к проекту.
Проверьте работу заготовки: в программе создается стандартное окно с
заголовком. Окно содержит системное меню и стандартные кнопки минимизации,
максимизации и закрытия приложения. Обратите внимание на эллипс, который при
изменении размеров окна «вписывается» в клиентскую область.
Запустите приложение и одновременно запустите утилиту Spy++ (Tools/Spy++). Посмотрите: сколько и каких сообщений поступает окну приложения
Пользуясь справочной системой и описанием (Практика_1) измените следующие элементы Вашего приложения по Вашему вкусу. Рекомендация – внеся очередное изменение, посмотрите на результат.
1) Иконка:
а) из предоставляемых ОС
б) создайте специфическую иконку
2) Курсор
а) из предоставляемых ОС
б) создайте специфическую иконку
3) фон окна:
a) – сплошной (попробуйте как стандартные кисти, предоставляемые Windows, так и Ваши собственные кисти – CreateSolidBrush() )
б)– с помощью CreateHatchBrush()
4) заголовок окна – например: “Это окно Полубенцевой М.И.!”
5) стили окна (введитескроллинг, сделайте так, чтобы невозможно было изменить размеры окна, попробуйте создать окно без возможности максимизации-минимизации…)
6) начальное расположение окна:
а) в параметрах функции CreateWindow– например, по центру экрана или в любой четверти экрана
Подсказка: для того, чтобы определить размерности экрана, пользуйтесь функцией GetSystemMetrics():
int nWidth = GetSystemMetrics(SM_CXSCREEN); //ширина экрана
int nHeight = GetSystemMetrics(SM_CYSCREEN); //высота экрана
б) – параметром функции ShowWindow - изначально максимизированное или минимизированное окно
Обратите внимание на мою заготовку оконной процедуры. В данном приложении существенным является:
а) обработка сообщения WM_DESTROY, так как только в этом
обработчике (в нашем приложении) посылается сообщение WM_QUIT, при получении которого осуществляется выход из цикла
обработки сообщений,
б) вызов процедуры обработки сообщений по умолчанию.
Для примера приведены макросы – взломщики сообщений для WM_SIZE и WM_PAINT.
Попробуйте изменить размеры окна – подумайте, почему эллипс
все время «вписывается» в клиентскую область окна? Поэкспериментируйте с
обработчиком WM_PAINT. Используя
дескриптор контекста устройства, выведите в окно какой-либо текст или нарисуйте
что-нибудь свое.
Функции вывода текста – TextOut и
DrawText
Функции рисования фигур – Ellipse, FillRect…
Раскомментируйте фрагмент обработчика сообщения WM_SIZE. При изменении размеров окна наблюдайте изменение текста заголовка окна.
По аналогии с приведенными обработчиками введите в Вашу
оконную процедуру:
а) обработку сообщения WM_RBUTTONDOWN.
Пусть в том месте клиентской области Вашего окна, где click-нута
мышь, что-нибудь выводится
б) обработку сообщения WM_MOUSEMOVE.
Пусть при поступлении очередного сообщения WM_MOUSEMOVE рисуется маленький кружок вокруг точки курсора мыши
Подсказка: для того, чтобы узнать каким образом должен выглядеть Ваш обработчик (какие параметры принимает функция), загляните в файл windowsx.h, найдите (find) требуемое сообщение и «позаимствуйте» закомментированное объявление функции.
В вашем окне создайте кнопку (а лучше две). Подсказка: самое лучшее место для этого – обработчик WM_CREATE (который тоже нужно ввести в Ваше приложение). Для этого используйте уже приведенную ранее при создании основного окна фукцию CreateWindow.
Подсказка 1:получить требуемый в качестве параметра при создании окна дескриптор Вашего приложения можно:
HINSTANCE hInst = (HINSTANCE)GetClassLong(hwnd,GCL_HMODULE);
Подсказка 2: стили окна для создания стандартной кнопки WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON
Так как сообщения WM_COMMAND могут поступать от разных дочерних элементов управления, при выборе пунктов меню, а также при трансляции нажатия акселераторов, в общем случае в обработчике WM_COMMAND следует предусмотреть анализ – какое именно пришло командное сообщение и “от кого”.
Для того, чтобы наблюдать реакцию на нажатие кнопки, предлагаю следующие варианты (импровизация поощряется):
1) измените цвет фона окна. Для этого научитесь работать с API-функцией SetClassLong(). Подсказка – для того, чтобы увидеть результат, окно нужно перерисовать.
2) выведите окно сообщения (message box) с помощью API-функции MessageBox()
1) Создайте еще одну кнопку. В обработчике нажатия этой кнопки создайте пользовательское POP-UP окно. Подумайте: что еще нужно предусмотреть для функционирования такого окна
2) Создайте еще одну кнопку. В обработчике нажатия этой кнопки измените взаимоотношения между главным окном приложения и созданным POP-UP окном следующим образом – с помощью SetParent сделайте POP-UP окно дочерним.
3) Создайте еще одну кнопку. В обработчике нажатия этой кнопки восстановите изначальные взаимоотношения между главным окном приложения и POP-UP окном с помощью SetParent
С помощью графического редактора создайте ресурс-меню. В созданное меню введите пункт, при выборе которого должен вызываться стандартный диалог для задания цвета.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.