Файл: Практическое задание Тема 4. Разработка простейших Win32 API программ.pdf

Добавлен: 20.10.2018

Просмотров: 873

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

создание необходимого количества перьев с помощью вызова 

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; 


background image

 

организовать цикл для вывода остальных вертикальных отрезков, 

внутри которого: 

активизировать очередное перо из массива перьев; 

переместить указатель текущей позиции в новую стартовую 

точку вызовом MoveToEx(контекст, i, 0, nil); 

вывести новый вертикальный отрезок; 

 

после завершения цикла восстановить стандартное перо и освободить 

контекст.  

Добавить в обработчик сообщения WM_Destroy цикл для уничтожения 

массива перьев с помощью вызова DeleteObject(перо). 

Задание 3.3.  Динамическое изменение цвета изображения. Создать 

приложение, которое выводит некоторое изображение (например – 5 

олимпийских колец) и динамически изменяет его цвет через заданный 

интервал времени (например – через 1 секунду) с помощью объекта-

таймера. Цвет должен выбираться случайно или по какому-либо 

алгоритму на основе заранее созданного массива из 256 перьев. Для 

решения задачи необходимо: 

 

добавить в приложение обработчик события WM_KeyDown с  

обработкой нажатия какой-либо функциональной клавиши для запуска 

таймера по вызову SetTimer; здесь же надо установить начальный 

номер пера; 

 

добавить в обработчик события WM_KeyDown обработку нажатия 

другой функциональной клавиши для отключения таймера по вызову 

KillTimer; 

 

добавить в оконную функцию обработку события от таймера 

WM_Timer для программной генерации сообщения WM_Paint с 

помощью вызова InvalidateRect и изменения номера текущего пера с 

анализом его значения (при достижении максимального значения надо 

вернуть номер в начальное значение); 


background image

 

в обработчике сообщения WM_Paint выполнить обычные действия: 

запросить контекст, установить прозрачный фон заполнения 

окружностей по вызову SelectObject(контекст,     (NULL_BRUSH)), 

выбрать очередное перо с сохранением стандартного пера, вывести 5 

окружностей, вернуть старой перо и освободить контекст; 

 

выполнить программу для нескольких значений временного интервала 

в пределах от 0.1 до 2 секунд. 

Задание  3.4.  Динамическое  изменение  структуры  изображения. 

Структура  графического  изображения,  созданного  с  помощью  основных 

примитивов,  определяется  перечнем  использованных  в  нем  примитивов.  В 

простейшем случае для каждого типа примитива можно ввести свой массив с 

параметрами  данных  примитивов.  Эта  информация  используется  для 

перерисовки  изображения  при  изменении  его  структуры,  т.е.  набора 

использованных примитивов. 

Необходимо 

создать 

приложение 

для 

динамического 

добавления/удаления  эллипсов  по  щелчку  левой/правой  кнопки  мыши. 

Эллипсы должны прорисовываться в точке, соответствующей щелчку мыши. 

Размеры  эллипсов  можно  взять  фиксированными  или  устанавливать 

случайно. Для реализации программы необходимо:  

 

ввести массив координат эллипсов и переменную-счетчик текущего 

числа эллипсов; 

 

в обработчике события   wm_Create  установить счетчик в ноль; 

 

в обработчике события   wm_LButtonDown   извлечь координаты 

положения мыши, запомнить их в массиве координат, увеличить 

счетчик и сгенерировать сообщение  wm_Paint  для перерисовки 

клиентской части окна; 

 

в обработчике события  wm_Paint  выполнить прорисовку эллипсов, 

используя массив координат и счетчик числа эллипсов; 


background image

 

в обработчике события  wm_RButtonDown   уменьшить счетчик на 1 

(сделать проверку!) и сгенерировать сообщение  wm_Paint  для 

прорисовки клиентской области окна без последнего эллипса;