Файл: Практическое задание Тема 4. Разработка простейших Win32 API программ.pdf
Добавлен: 20.10.2018
Просмотров: 961
Скачиваний: 8
создание необходимого количества перьев с помощью вызова
CreatePen, где тип пера задается константами ps_Solid, ps_Dot, ps_Dash;
выбор одного из перьев в контекст по вызову SelectObject; при
выполнении этой операции первый раз необходимо сохранить
стандартное перо в отдельной переменной;
вывод примитивов с помощью установленного пера;
изменение пера с помощью вызова SelectObject и вывод необходимых
примитивов;
после вывода всех примитивов восстановить старое перо вызовом
SelectObject;
при завершении приложения удалить все созданные ранее
инструменты.
Для освоения данного механизма создать приложение, которое
выводит последовательность расположенных рядом отрезков с помощью
предварительно созданного набора перьев. Для этого можно объявить массив
из 256 перьев (удобнее использовать индексацию от 0 до 255) и в
обработчике события WM_Create в цикле заполнить этот массив цветными
перьями. Цвета перьев можно задавать либо случайно, либо по определенной
закономерности. Например, циклическое задание цвета вида RGB(i, i, i) при
изменении i от 0 до 255 создаст последовательность перьев с постепенным
переходом от черного цвета к белому с промежуточными оттенками серого
цвета. Аналогично, задание цвета по алгоритму RGB(255 – i, i, i) формирует
цветовую гамму с постепенным переходом от красного к голубому.
В обработчике сообщения WM_Paint необходимо:
запросить контекст с помощью вызова BeginPaint;
активизировать первое по порядку перо из созданного массива перьев с
сохранением стандартного пера;
вывести первый вертикальный отрезок от начальной точки (0; 0) до
конечной точки с помощью вызова LineTo;
организовать цикл для вывода остальных вертикальных отрезков,
внутри которого:
o
активизировать очередное перо из массива перьев;
o
переместить указатель текущей позиции в новую стартовую
точку вызовом MoveToEx(контекст, i, 0, nil);
o
вывести новый вертикальный отрезок;
после завершения цикла восстановить стандартное перо и освободить
контекст.
Добавить в обработчик сообщения WM_Destroy цикл для уничтожения
массива перьев с помощью вызова DeleteObject(перо).
Задание 3.3. Динамическое изменение цвета изображения. Создать
приложение, которое выводит некоторое изображение (например – 5
олимпийских колец) и динамически изменяет его цвет через заданный
интервал времени (например – через 1 секунду) с помощью объекта-
таймера. Цвет должен выбираться случайно или по какому-либо
алгоритму на основе заранее созданного массива из 256 перьев. Для
решения задачи необходимо:
добавить в приложение обработчик события WM_KeyDown с
обработкой нажатия какой-либо функциональной клавиши для запуска
таймера по вызову SetTimer; здесь же надо установить начальный
номер пера;
добавить в обработчик события WM_KeyDown обработку нажатия
другой функциональной клавиши для отключения таймера по вызову
KillTimer;
добавить в оконную функцию обработку события от таймера
WM_Timer для программной генерации сообщения WM_Paint с
помощью вызова InvalidateRect и изменения номера текущего пера с
анализом его значения (при достижении максимального значения надо
вернуть номер в начальное значение);
в обработчике сообщения WM_Paint выполнить обычные действия:
запросить контекст, установить прозрачный фон заполнения
окружностей по вызову SelectObject(контекст, (NULL_BRUSH)),
выбрать очередное перо с сохранением стандартного пера, вывести 5
окружностей, вернуть старой перо и освободить контекст;
выполнить программу для нескольких значений временного интервала
в пределах от 0.1 до 2 секунд.
Задание 3.4. Динамическое изменение структуры изображения.
Структура графического изображения, созданного с помощью основных
примитивов, определяется перечнем использованных в нем примитивов. В
простейшем случае для каждого типа примитива можно ввести свой массив с
параметрами данных примитивов. Эта информация используется для
перерисовки изображения при изменении его структуры, т.е. набора
использованных примитивов.
Необходимо
создать
приложение
для
динамического
добавления/удаления эллипсов по щелчку левой/правой кнопки мыши.
Эллипсы должны прорисовываться в точке, соответствующей щелчку мыши.
Размеры эллипсов можно взять фиксированными или устанавливать
случайно. Для реализации программы необходимо:
ввести массив координат эллипсов и переменную-счетчик текущего
числа эллипсов;
в обработчике события wm_Create установить счетчик в ноль;
в обработчике события wm_LButtonDown извлечь координаты
положения мыши, запомнить их в массиве координат, увеличить
счетчик и сгенерировать сообщение wm_Paint для перерисовки
клиентской части окна;
в обработчике события wm_Paint выполнить прорисовку эллипсов,
используя массив координат и счетчик числа эллипсов;
в обработчике события wm_RButtonDown уменьшить счетчик на 1
(сделать проверку!) и сгенерировать сообщение wm_Paint для
прорисовки клиентской области окна без последнего эллипса;