Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Лабораторная работа №17-18
Тема: «Рисование графических фигур на экране монитора»
Цель работы: приобрести практические навыки рисования графических фигур на экране монитора.
Краткие теоретические сведения:
1. Библиотека классов Microsoft Foundation Classes (MFC)
Библиотека классов Microsoft Foundation Classes (MFC) содержит набор средств объектно-ориентированного программирования, предназначенных для разработки 32-разрядных приложений. MFC - это мощный инструментарий объектно-ориентированного программирования.
Библиотека MFC дает возможность использования различных классов объектов. Наиболее важные структуры данных и API-функции инкапсулированы в группы классов, пригодных для многократного использования.
По сравнению с традиционными библиотеками функций, которые использовались в программах на языке С, библиотека MFC имеет много достоинств.
Основные преимущества использования классов C++ следующие:
Благодаря MFC код, требуемый для отображения окна приложения, можно сократить примерно в три раза. При этом появляется возможность уделять больше времени и внимания разработке процедур взаимодействия приложения с Windows, для решения которых и создается приложение.
В основу MFC положены следующие принципы:
Простота базовых классов делает их весьма несложными в использовании, а по скорости работы их методы практически не уступают библиотечным функциям языка С.
При создании MFC также учтены возможности работы в смешанном режиме. Другими словами, в одной программе могут применяться как библиотека MFC, так и API-функции.
Еще одно важное свойство, MFC заключается в том, что имеется возможность непосредственного применения базовых классов в программах.
Основные достоинства библиотеки MFC:
Библиотека MFC поставляется вместе с исходными текстами классов, что дает возможность настраивать базовые классы в соответствии со своими потребностями.
2. Создание проекта программы рисования фигур
Используя мастер Application Wizard, создадим проект с именем GDI. Для этого необходимо:
Для того, чтобы иметь возможность рисовать в рабочей области приложения графические фигуры, нужно предварительно модифицировать часть файла исходного кода gdiView.cpp. Для этого необходимо открыть этот файл, щелкнув по нему мышью, затем в этом файле найти фрагмент , озаглавленный как CgdiView drawing.
Файл GdiView.cpp, который содержит реализацию класса CGdiView, порождается от класса CGdiView и управляет отображением документа на экране монитора. В файл класса CGdiView добавлен фрагмент, выделенный полужирным шрифтом, который позволяет производит окраску графических фигур указанными цветами.
3. Программа рисования фигур
// GdiView.cpp : реализация класса CGdiView
#include "stdafx.h"
#include "Gdi. h"
#include "GdiDoc.h"
#include "GdiView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//CGdiViewdrawing
void CgdiView :: OnDraw(CDC* pDC) {
CGdiDoc* pDoc = GetDocument( );
ASSERT_VALID(pDoc);
static DWORD dwColor[9]={
RGB(0,0,0), //черный
RGB(255,0,0), //красный
RGB(0,255,0), //зеленый
RGB(0,0,255), //синий
RGB(255,255,0), //желтый
RGB(255,0,255), //пурпурный
RGB(0,255,255), //голубой
RGB(127,127,127), //серый
RGB(255,255,255)}; //белый
int xcoord;
POINT polylpts[4],polygpts[5];
CBrush newbrush;
CBrush* oldbrush;
CPen newpen;
CPen* oldpen;
// рисование толстой диагональной линии
newpen.CreatePen(PS_SOLID,6,dwColor[0]);
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(0,0);
pDC->LineTo(640,430);
pDC->TextOut(70,20,"<-diagonalline",15);
// удаление пера
pDC->SelectObject (oldpen);
newpen.DeleteObject();
// рисование синей дуги
newpen.CreatePen(PS_DASH,1,dwColor[3]);
oldpen=pDC->SelectObject(&newpen);
pDC->Arc(100,100,200,200,150,175,175,150);
pDC->TextOut(80,180,"smal1 arc->",11);
// удаление пера
pDC->SelectObject(oldpen);
newpen.DeleteObject( );
// рисование сегмента с толстым зеленым контуром
newpen.CreatePen(PS_SOLID,8,dwColor[2]);
oldpen=pDC->SelectObject(&newpen);
pDC->Chord(550,20,630,80,555,25,625,70);
pDC->TextOut(485,30,"chord->",7);
// удаление пера
pDC->SelectObject(oldpen);
newpen.DeleteObject ( );
// рисование эллипса и заливка его красным цветом
CreatePen(PS_SOLID,1,dwColor[1]);
oldpen=pDC->SelectObject(&newpen);
newbrush.CreateSolidBrush(dwColor[1]);
oldbrush=pDC->SelectObject(&newbrush);
pDC->Ellipse(180,180,285,260);
pDC->TextOut(210,215, "ellipse", 7);
// удаление кисти
pDC->SelectObject(oldbrush);
newbrush.DeleteObject();
// удаление пера
pDC->SelectObject(oldpen);
newpen. DeleteObject ( );
// рисование круга и заливка его синим цветом
newpen.CreatePen(PS_SOLID,1,dwColor[3]);
oldpen=pDC->SelectObject(&newpen);
newbrush.CreateSolidBrush (dwColor[3]);
oldbrush=pDC->SelectObject(&newbrush);
pDC->Ellipse(380,180,570,370);
pDC->TextOut(450,265,"circle",6);
// удаление кисти
pDC->SelectObject(oldbrush);
newbrush.DeleteObject() ;
// удаление пера
pDC->SelectObject(oldpen) ;
newpen.DeleteObject();
// рисование сектора и заливка его зеленым цветом
newpen.CreatePen(PS_SOLID,1,dwColor[0]);
oldpen=pDC->SelectObject(&newpen);
newbrush.CreateSolidBrush(dwColor[2]);
oldbrush=pDC->SelectObject(&newbrush);
pDC->Pie(300,50,400,150,300,50,300,100);
pDC->TextOut(350,80,"<-pie wedge",11);
// удаление кисти
pDC->SelectObject(oldbrush) ;
newbrush.DeleteObject();
//удаление пера
pDC->SelectObject(oldpen) ;
newpen.DeleteObject();
// рисование прямоугольника и заливка его серым цветом
newbrush.CreateSolidBrush(dwColor[7]);
oldbrush=pDC->SelectObject(&newbrush);
pDC->Rectangle(50,300,150,400);
pDC->TextOut(160,350,"<-rectangle",11);
// удаление кисти
pDC->SelectObject(oldbrush);
newbrush.DeleteObject( );
// рисование закругленного прямоугольника и заливка его синим цветом
newbrush.CreateHatchBrush(HS_CROSS,dwColor[3]);
oldbrush=pDC->SelectObject(&newbrush);
pDC->RoundRect(60,310,110,350,20,20);
pDC->TextOut (120,310,"<-rounded rectangle" ,19);
// удаление кисти
pDC->SelectObject(oldbrush);
newbrush.DeleteObject( );
// рисование нескольких точек
for(xcoord=400;xcoord<450;xcoord+=3)
pDC->SetPixel(xcoord,150,0L);
pDC->TextOut(455,145,"<-pixels",8);
// рисование толстой ломаной линии пурпурного цвета
newpen.CreatePen(PS_SOLID,3,dwColor[5]);
oldpen=pDC->SelectObject(&newpen);
polylpts[0].x=10;
polylpts[0].y=30;
polylpts[1].x=10;
polylpts[1].y=100;
polylpts[2].x=50;
polylpts[2].y=100;
polylpts[3].x=10;
polylpts[3].y=30;
pDC->Polyline(polylpts,4);
pDC->TextOut(10,110,"polyline",8);
// удаление пера
pDC->SelectObject(oldpen);
newpen.DeleteObject( );
// рисование многоугольника с голубым контуром и заливка его диаг. желтой штриховкой
newpen.CreatePen(PS_SOLID,4,dwColor[6]);
oldpen=pDC->SelectObject(&newpen);
newbrush.CreateHatchBrush(HS_FDIAGONAL,dwColor[4]);
oldbrush=pDC->SelectObject(&newbrush);
polygpts[0].x=40;
polygpts[0].y=200;
polygpts[1].x=100;
polygpts[1].y=270;
polygpts[2].x=80;
polygpts[2].y=290;
polygpts[3].x=20;
polygpts[3].y=220;
polygpts[4].x=40;
polygpts[4].y=200;
pDC->Polygon(polygpts,5);
pDC->TextOut(70,210,"<-polygon",9);
// удаление кисти
pDC->SelectObject(oldbrush);
newbrush.DeleteObject ();
// удаление пера
pDC-> SelectObject(oldpen);
newpen.DeleteObject( );
}
4. Пояснения к программе рисования фигур
Рисование линий и геометрических фигур с заданным цветом выполняется программируемыми «перьями», а раскраска фигур осуществляется «кистями», которые реализуются в классах CBrush и СРеn.
Структура dwColor: создается массив, в котором хранятся девять RGB-значений цветов для используемых кистей и перьев:
static DWORD dwColor[9]=
{
RGB(0,0,0), //черный
RGB(255,0,0), //красный
RGB(0,255,0), //зеленый
RGBCO,0,255), //синий
RGB(255,255,0), //желтый
RGB(255,0,255), //пурпурный
RGB(0,255,255), //голубой
RGB(127,127,127), //серый
RGB(255,255,255) //белый
};
Кисти и перья создаются с помощью классов CBrush и СРеn, которые можно передавать функциям класса CDC - базового класса для контекста устройства отображения. Кисти могут иметь сплошную и штриховую заливку, а также заливку в виде растрового узора. Перья рисуют сплошной, штриховой или пунктирной линиями. Синтаксис программы, отвечающей за создание кистей перьев, приведен ниже:
CBrush newbrush;
CBrush* oldbrush;
CPen newpen;
CPen* oldpen;
Поскольку для рисования различных графических примитивов применяются аналогичные алгоритмы, рассмотрим лишь два наиболее типичных фрагмента. В первом случае на экран выводится толстая черная диагональная линия.
// рисование толстой черной диагональной линии
newpen.CreatePen(PS_SOLID,6,dwColor[0]);
oldpen-pDC->SelectObject(&newpen);
pDC->MoveTo(0,0);
pDC->LineTo(640,430);
pDC->TextOut(70,20,"<-diagonal 1ine",15);
// удаление пера
pDC->SelectObject(oldpen);
newpen.DeleteObjectO;
Перо создается функцией CreatePen(), которая задает рисование черных сплошных линий толщиной в шесть логических единиц. Сразу после этого функция SelectObject() обновляет перо, связывает его с контекстом устройства отображения (экраном монотора) и возвращает указатель на предыдущий объект пера. Функции LineTo() формируют диагональную линию, которая рисуется выбранными пером. Наконец, функция TextOut() выводит рядом с нарисованной фигурой надпись.
Работа с кистями организована аналогичным образом. В следующем коде создается кисть с заливкой в виде горизонтальных и вертикальных штрихов (HS_CROSS) синего цвета:
// рисование черного закругленного прямоугольника и заливка его синим цветом
newbrush.CreateHatchBrush(HS_CROSS,dwColor[3]);
oldbrush=pDC->SelectObject(&newbrush);
pDC->RoundRect(60,310,110,350,20,20);
pDC->TextOut (120,310,"<-rounded rectangle",19);
// удаление кисти
pDC->SelectObject(oldbrush);
newbrush.DeleteObject С);
Функция RoundRect () рисует прямоугольник с закругленными краями и заданными координатами, после чего выводится надпись. Все остальные фигуры рисуются аналогичным образом.
Перечень оборудования, аппаратного и программного обеспечения:
- персональный компьютер;
- программная среда Visual C++ .NET 2003.
Порядок выполнения работы:
1. Изучить работу Мастера MFC приложений.
2. Создать проект MFC приложения для рисования фигур.
3. Вставить фрагмент рисования фигур в файл СGdiView.cpp после строки // GdiView drawing, отредактировать и выполнить программу.
4. Подготовить отчет.
5. Ответить на контрольные вопросы.
Порядок выполнения программ в среде Visual C++ .NET 2003:
1. Запустить Microsoft Visual Studio C++ .NET 2003/
2. Создать MFC проект под именем Gdi.
3. Набрать текст программы рисования фигур в файл СGdiView.cpp.
4. Создать файл Gdi.exe. Для этого необходимо выделить файл СGdiView.cpp. В меню Build выбрать Build Solution. Исправить ошибки компиляции.
5. Запустить программу, результаты работы программы проанализировать на экране дисплея.
Контрольные вопросы:
1. Особенности и классы MFC библиотеки?
2. Какие файлы составляют проект в MFC приложении?
3. Как формируются цвета в программе рисования фигур?
4. Какие основные инструменты используются при рисовании фигур?
5. Как в программе реализуются инструменты для рисования и заливки фигур различными цветами?
6. Поясните работу программы рисования фигур.
Содержание отчета:
1. Титульный лист.
2. Цель работы, перечень оборудования, аппаратного и программного обеспечения.
3. Скриншот экрана с нарисованными фигурами.
4. Ответы на контрольные вопросы.
5. Выводы о проделанной работе.