Работа с графикой посредством возможностей MFC (Лабораторная работа № 9 по VisualC++ 2005), страница 5

        pDC->LineTo(100,100);

        pDC->LineTo(200,0);

        pDC->LineTo(10,10);

        pDC->Rectangle(600,10,680,100);

//Прямоуг.,заштрихованный кистью

CBrush*pOldBrush1=

(CBrush*)pDC->SelectStockObject(BLACK_BRUSH);

//Выбрали новую (чёрную)кисть и запомнили адрес старой //кисти. Использовано явное преобразование типа

        pDC->Rectangle(150,150,250,250);

//Нарисовали прямоугольник, который закрашен новой  //чёрной кистью

        pDC->SelectStockObject(LTGRAY_BRUSH);//Выбрали //стандартную светло-серую текущую кисть

        pDC->Ellipse(200,200,100,75);

//Нарисован эллипс, закрашенный кистью.

//Он частично перекрыл чёрный прямоугольник

        pDC->SelectObject(pOldPen);

//Восстановили старое перо. Сплошная, чёрная линия

        //толщиной 1 пиксель

        pDC->SelectObject(pOldBrush1);

//Восстановили старую кисть. Диагональная

//штиховка голубого цвета

        pDC->Rectangle(600,200,680,250);//Нарисовали и //закрасили восстановленными пером и кистью

        pDC->SelectStockObject(HOLLOW_BRUSH);

//Сменили кисть на полую

        pDC->MoveTo(400,30);

        pDC->LineTo(450,150);//Перечеркнули будущий //эллипс

        pDC->Ellipse(400,30,450,150);

//Линию видно через эллипс, т.к.кисть полая. При белой //кисти WHITE_BRUSH эллипс перекрывает часть линии

        pDC->MoveTo(300,200);

        pDC->LineTo(570,200);

        pDC->LineTo(570,400);

        pDC->LineTo(300,200);//Нарисовали треугольник

        pDC->SelectStockObject(GRAY_BRUSH);

//Выбрали серую кисть

        pDC->FloodFill(450,250,RGB(0,0,0));

//Закрасили треугольник

        pDC->Arc(50,250,150,350,50,250,130,300);

//Нарисовали дугу.

}

4.1 Последовательность действий

          1) Создать проект. Create: project;

Выбрать тип проекта (Project types) MFC и шаблон (Templates) -  

MFC Application.

 Дать имя (Name)   < например, My1. Нажать OK  или Enter.

          2) В   появившемся окне MFC Application Wizard нажать Next, выбрать Single document и нажать Finish.

          3)  В окне Solution Explorer выбрать вкладку Class View, раскрыть папку My1 а затем папку Classes.

          4) Выбрать класс CMy1View. Откроется список методов этого класса.

Выбрать  метод OnDraw() и дважды щёлкнуть на нём.  В окне редактора появится заготовка метода.

          5)  В круглых скобках ввести имя  указателя на контекст, например, OnDraw(CDC*pDC).

          6) В заготовке функции OnDraw() в месте, обозначенном комментарием // TODO : add draw code for native data here

Введите собственный код для рисования, например:

void CMy1View::OnDraw(CDC* pDC/*pDC*/)

{

    CMy1Doc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    if (!pDoc)

        return;

CPen pen1(PS_SOLID,3,RGB(0,0,255));

pDC->SelectObject(&pen1);

pDC->MoveTo(200,200);

pDC->LineTo(10,10);

pDC->Ellipse(10,10,400,300);

    // TODO: add draw code for native data here

}

    7) Нажатием Ctrl+F5 запустить программу на компиляцию, сборку и (при отсутствии ошибок) на выполнение.

3 Контрольные вопросы

1 Что такое контекст устройства и зачем он нужен?

2 Какая функция осуществляет графический вывод, когда она вызывается и      зачем нужна функция GetDocument( ) ?

3 Какие имеются стандартные объекты GDI ?

4 Как можно устанавливать цвет пера или кисти?

5 Как можно установить перо?

6 Как можно установить кисть?

7 Как нарисовать  прямоугольник?

8 Как нарисовать  эллипс?

9 Как нарисовать  дугу?

10 Зачем нужен указатель на CDC?

11 Как закрасить произвольную замкнутую область?

12 Как оставить фигуру незакрашенной?

13) Какие методы используются чтобы нарисовать изображение по пикселям?

14) Как соединить линией каждую последующую точку с предыдущей, если имеется массив точек?

15) Как определить составляющие цвета для заданного пикселя?

Список литературы

1 Айвор Хортон  VISUAL C++ 2005 Базовый курс, «Диалектика», Москва*Санкт-Петербург*Киев , 2007г.

2 Сергеев А.П., Терен А.Н. Программирование в VISUAL C++ 2005 «Диалектика», Москва*Санкт-Петербург*Киев , 2006г.