Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Перепишите в созданную 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
С помощью графического редактора создайте ресурс-меню. В созданное меню введите пункт, при выборе которого должен вызываться стандартный диалог для задания цвета.
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.