У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 1718 Тема- Рисование графических фигур на экране монитора Цель работы- приобрест

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

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

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

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 30.6.2025

Лабораторная работа №17-18

Тема: «Рисование графических фигур на экране монитора»

Цель работы: приобрести практические навыки рисования графических фигур на экране монитора.

Краткие теоретические сведения:

1. Библиотека классов Microsoft Foundation Classes (MFC)

Библиотека классов Microsoft Foundation Classes (MFC) содержит набор средств объектно-ориентированного программирования, предназначенных для разработки 32-разрядных приложений. MFC - это мощный инструментарий объектно-ориентированного программирования. 

Библиотека MFC дает возможность использования различных классов объектов. Наиболее важные структуры данных и API-функции инкапсулированы в группы классов, пригодных для многократного использования.

По сравнению с традиционными библиотеками функций, которые использовались в программах на языке С, библиотека MFC имеет много достоинств.

Основные преимущества использования классов C++ следующие:

  1.  устраняются конфликты, возникшие из-за совпадения имен функций и переменных;
  2.  код и данные инкапсулируются в классах;
  3.  осуществляется наследование функциональных возможностей;
  4.  размер кода значительно сокращается за счет хорошо организованной библиотеки классов;
  5.  создаваемые программистом классы являются естественным расширением языка.

Благодаря MFC код, требуемый для отображения окна приложения, можно сократить примерно в три раза. При этом появляется возможность уделять больше времени и внимания разработке процедур взаимодействия приложения с Windows, для решения которых и создается приложение.

В основу MFC положены следующие принципы:

  1.  возможность комбинирования обычных вызовов функций с методами классов;
  2.  баланс между производительностью и эффективностью базовых классов;
  3.  преемственность в переходе от использования API-функций к библиотеке классов;
  4.  простоту переноса библиотеки классов на разные платформы ОС.
  5.  наиболее полное использование возможностей C++ без чрезмерного усложнения программного кода.

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

При создании MFC также учтены возможности работы в смешанном режиме. Другими словами, в одной программе могут применяться как библиотека  MFC, так и API-функции.

Еще одно важное свойство, MFC  заключается в том, что имеется возможность непосредственного применения базовых классов в программах.

Основные достоинства библиотеки MFC:

  1.  Расширенная система обработки исключительных ситуаций, благодаря которой приложения менее чувствительны к ошибкам и сбоям. Такие ошибки, как «нехватка памяти» обрабатываются автоматически.
  2.  Улучшенная система диагностики, позволяющая записывать в файл информацию об используемых объектах. Сюда также следует отнести возможность контроля корректности значений переменных-членов.
  3.  Полная поддержка всех API-функций, элементов управления, сообщений, GDI, графических примитивов, меню и диалоговых окон.
  4.  Возможность определить тип объекта во время выполнения программы. Это позволяет осуществлять динамическое манипулирование свойствами экземпляров классов.
  5.  Отпала необходимость в использовании многочисленных громоздких структур switch/case, которые часто являются источниками ошибок. Все сообщения связываются с их обработчиками внутри классов. Этот способ привязки сообщений к обработчикам событий применим ко всем сообщениям.
  6.  Небольшой размер и быстрота выполнения программного кода. Как уже говорилось выше, по этим показателям MFC не уступает стандартным библиотечным функциям языка С.
  7.  Поддержка COM (Component Object Model - модель компонентных объектов).
  8.  Использование тех же соглашений об именовании методов классов, которые применялись при подборе имен для API-функций Windows. Это существенно облегчает идентификацию действий, выполняемых классами.

Библиотека MFC поставляется вместе с исходными текстами классов, что дает возможность настраивать базовые классы в соответствии со своими потребностями.

2. Создание проекта программы рисования фигур

Используя мастер Application Wizard,  создадим проект с именем GDI. Для этого необходимо:

  1.  В меню File открыть вкладку New, Project, выбрать иконку MFC Application, в окне Name: набрать имя gdi, в окне Location: указать путь к папке, в которую будет записан проект, нажать ОК.
  2.  На вкладке MFC Application Wizard – выбрать Application Type и установить Single documents (поддержка единичного документа), MFC standard, Use MFC in a static library, Document/View architecture support, Resource language – Английский (США).
  3.  На вкладке MFC Application Wizard – выбрать Compound Document Support, установить None.
  4.  На вкладке MFC Application Wizard -  Document Template Strings  должны стоять стандартные установки.
  5.  На вкладке MFC Application Wizard – выбрать Database support и установить None.
  6.  На вкладке MFC Application Wizard – выбрать User Interface Features и установить Thick frame, Minimize box, Maximize box, System menu, Toolbars - None.
  7.  На вкладке MFC  Application Wizard – выбрать Advance Features,  снять все установки, Number of files on recent file list – 4.
  8.  На вкладке MFC Application Wizard – Generated Classes должен появиться  перечень из 4  классов проекта: CgdiView, CgdiApp, CgdiDoc, CMainFrame.
  9.  В итоге получим папку с файлами проекта Gdi. Если папка с файлами проекта не появилась на экране, необходимо выбрать в меню View, Solution Explorer. Открыв папку Source Files, можно убедиться в наличии файлов проекта.

        Для того, чтобы иметь возможность рисовать в рабочей области приложения графические фигуры, нужно предварительно модифицировать часть файла исходного кода 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( );

}

После ввода кода рисования фигур необходимо выполнить компиляцию программы, для этого в меню Build следует выбрать Build Solution. В результате компиляции в папке Debug проекта будет создан файл Cview.cpp, выполнение которого обеспечивает рисование указанных в файле фигур.

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. Выводы о проделанной работе.




1. хорошая основа на тот случай если у вас пока еще не слишком много собственного опыта сведения или же если с п
2. Особенности государственной поддержки малого бизнеса
3. 94.Механические способы разработки грунтоввиды землеройнотранспортных машин и области их применения
4. Александр Блок
5. Федерация конного Руководитель главного управления спорта Красноярского кра
6. Реклама товара
7. Тромбоэмболия легочной артерии, ее лечени
8. Антикризисная маркетинговая компания
9. ОБЩИЕ ТРЕБОВАНИЯ Минеральные порошки изготавливаемые из известняков доломитов и других карбонатны
10. РЕФЕРАТ Дисертації на здобуття наукового ступеня кандидата економічних наук Донецьк ~ Дисерт