Пример выполнения лабораторной работы




Лабораторная работа № 2

Работа с графикой

Задание: Написать программу для вывода на экран рисунка по варианту.

Теоретический материал

Для вывода рисунка на экран необходимо создать особый проект.

 

«Проект Win32». В не автоматически сгенерируется код и подключаться библиотеки, необходимые для вывода элементов графики на экран.

Код большой, но в нем нудно найти функцию

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

 

И в ней один из кейсов метода switch:

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

// TODO: добавьте любой код отрисовки...

EndPaint(hWnd, &ps);

break;

 

Вот между строками hdc = BeginPaint(hWnd, &ps) и EndPaint(hWnd, &ps); будем писать код прорисовки изображения

 

Пример выполнения лабораторной работы

Первый шаг, создадим кисть, зазадим ей цвет и выберем ее для рисования.

HBRUSH hBrush; //создаём кисть

hBrush = CreateSolidBrush(RGB(0, 0, 0));

SelectObject(hdc, hBrush);

Зададим фон

RECT rect;

GetClientRect(hWnd, &rect);

FillRect(hdc, &rect, hBrush);

В результате имеем такой код:

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

HBRUSH hBrush; //создаём кисть

hBrush = CreateSolidBrush(RGB(0, 0, 0));

SelectObject(hdc, hBrush);

RECT rect;

GetClientRect(hWnd, &rect);

FillRect(hdc, &rect, hBrush);

EndPaint(hWnd, &ps);

break;

И такую картинку при запуске:

 

Поиграясь со параметрами цветов в функции, задающей цвет кисти, получаем другую заливку

hBrush = CreateSolidBrush(RGB(5, 150, 20));

При описанных выше параметрах, получим следующий фон:

 

Теперь изучим другой способ рисования, без заливки, используя карандаш.

HPEN blackpen;

blackpen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0)); //Задаем перо толщиной 2 пикселя

SelectObject(hdc, blackpen); //Выбираем перо

Задали карандаш, теперь отрисуем им прямоугольник.

Rectangle(hdc, 100, 100, 250, 170);

Здесь первые 2 числа – левый верхний угол, вторые два – правый нижний.

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

hBrush = CreateSolidBrush(RGB(120, 120, 120));

SelectObject(hdc, hBrush);

Rectangle(hdc, 100, 100, 310, 170);

И еще немного прямоугольников

SelectObject(hdc, blackpen);

Rectangle(hdc, 120, 120, 190, 170);

Rectangle(hdc, 220, 120, 290, 170);

SelectObject(hdc, hBrush);

Rectangle(hdc, 70, 170, 340, 230);

hBrush = CreateSolidBrush(RGB(0, 0, 0));

SelectObject(hdc, hBrush);

Rectangle(hdc, 85, 185, 325, 215);

Теперь как рисовать окружности

blackpen = CreatePen(PS_SOLID, 5, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

Ellipse(hdc, 130, 130, 180, 170);

Получится окружность. Если нам нужна закрашенная, то выбираем кисть

HBRUSH colorBrush;

colorBrush = CreateSolidBrush(RGB(255, 0, 0));

SelectObject(hdc, colorBrush);

Ellipse(hdc, 130, 130, 180, 170);

И еще окружности:

colorBrush = CreateSolidBrush(RGB(255, 240, 0));

SelectObject(hdc, colorBrush);

Ellipse(hdc, 220, 120, 290, 170);

 

blackpen = CreatePen(PS_SOLID, 10, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

Ellipse(hdc, 153, 148, 158, 153);

Ellipse(hdc, 250, 142, 258, 150);

 

blackpen = CreatePen(PS_SOLID, 5, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

Ellipse(hdc, 130, 20, 180, 100);

Ellipse(hdc, 230, 20, 280, 100);

И последнее, отрисовка линий:

MoveToEx(hdc, 145, 40, 0);

LineTo(hdc, 165, 40);

Перемещаемся в точку (функция MoveToEx, первое и второе число) и рисуем линию до другой точки (LineTo).

Еще линии

MoveToEx(hdc, 245, 40, 0);

LineTo(hdc, 265, 40);

MoveToEx(hdc, 155, 40, 0);

LineTo(hdc, 155, 80);

MoveToEx(hdc, 255, 40, 0);

LineTo(hdc, 255, 80);

 

MoveToEx(hdc, 165, 110, 0);

LineTo(hdc, 205, 130);

MoveToEx(hdc, 245, 110, 0);

LineTo(hdc, 205, 130);

MoveToEx(hdc, 205, 110, 0);

LineTo(hdc, 205, 130);

Почти получился рисунок, остались последние штрихи:

blackpen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

HBRUSH whiteBrush, blackBrush;

whiteBrush = CreateSolidBrush(RGB(255, 255, 255));

SelectObject(hdc, whiteBrush);

Rectangle(hdc, 175, 185, 195, 205);

Rectangle(hdc, 215, 185, 235, 205);

 

blackBrush = CreateSolidBrush(RGB(0, 0, 0));

SelectObject(hdc, blackBrush);

Ellipse(hdc, 190, 160, 220, 180);

В результате получаем «симпатичного» зайца-робота из «Ну, погоди!»

 


 

Полный код:

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

HBRUSH hBrush; //создаём кисть

hBrush = CreateSolidBrush(RGB(5, 150, 20));

SelectObject(hdc, hBrush);

RECT rect;

GetClientRect(hWnd, &rect);

FillRect(hdc, &rect, hBrush);

 

HPEN blackpen;

blackpen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0)); //Задаем перо толщиной 2 пикселя

SelectObject(hdc, blackpen); //Выбираем перо

Rectangle(hdc, 100, 100, 250, 170);

 

hBrush = CreateSolidBrush(RGB(120, 120, 120));

SelectObject(hdc, hBrush);

Rectangle(hdc, 100, 100, 310, 170);

SelectObject(hdc, blackpen);

Rectangle(hdc, 120, 120, 190, 170);

Rectangle(hdc, 220, 120, 290, 170);

SelectObject(hdc, hBrush);

Rectangle(hdc, 70, 170, 340, 230);

hBrush = CreateSolidBrush(RGB(0, 0, 0));

SelectObject(hdc, hBrush);

Rectangle(hdc, 85, 185, 325, 215);

 

blackpen = CreatePen(PS_SOLID, 5, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

Ellipse(hdc, 130, 130, 180, 170);

 

HBRUSH colorBrush;

colorBrush = CreateSolidBrush(RGB(255, 0, 0));

SelectObject(hdc, colorBrush);

Ellipse(hdc, 130, 130, 180, 170);

 

blackpen = CreatePen(PS_SOLID, 5, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

Ellipse(hdc, 220, 120, 290, 170);

 

colorBrush = CreateSolidBrush(RGB(255, 240, 0));

SelectObject(hdc, colorBrush);

Ellipse(hdc, 220, 120, 290, 170);

 

blackpen = CreatePen(PS_SOLID, 10, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

Ellipse(hdc, 153, 148, 158, 153);

Ellipse(hdc, 250, 142, 258, 150);

 

blackpen = CreatePen(PS_SOLID, 5, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

Ellipse(hdc, 130, 20, 180, 100);

Ellipse(hdc, 230, 20, 280, 100);

 

MoveToEx(hdc, 145, 40, 0);

LineTo(hdc, 165, 40);

MoveToEx(hdc, 245, 40, 0);

LineTo(hdc, 265, 40);

MoveToEx(hdc, 155, 40, 0);

LineTo(hdc, 155, 80);

MoveToEx(hdc, 255, 40, 0);

LineTo(hdc, 255, 80);

 

MoveToEx(hdc, 165, 110, 0);

LineTo(hdc, 205, 130);

MoveToEx(hdc, 245, 110, 0);

LineTo(hdc, 205, 130);

MoveToEx(hdc, 205, 110, 0);

LineTo(hdc, 205, 130);

 

blackpen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));

SelectObject(hdc, blackpen);

HBRUSH whiteBrush, blackBrush;

whiteBrush = CreateSolidBrush(RGB(255, 255, 255));

SelectObject(hdc, whiteBrush);

Rectangle(hdc, 175, 185, 195, 205);

Rectangle(hdc, 215, 185, 235, 205);

 

blackBrush = CreateSolidBrush(RGB(0, 0, 0));

SelectObject(hdc, blackBrush);

Ellipse(hdc, 190, 160, 220, 180);

 

EndPaint(hWnd, &ps);

break;


 

Разбиение задач по вариантам

Вариант Задание рисунок Задание эмблема
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

 

Варианты заданий на рисунок

Номер варианта Рисунок Номер варианта Рисунок
   
   
   
   
   

 


Варианты заданий на эмблемы

Обязательно с подписью

Номер варианта Логотип по варианту Номер варианта Логотип по варианту
   
   
   
   
   

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-12-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: