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

Класс CDC переопределяет и эту функцию подобно предыдущей:

BOOLLineTo( intx, inty );//Рисовать линию до позиции x, y

BOOLLineTo ( POINTaPoint);// Рисовать линию допозиции, определённой  //    aPoint.

Функция возвращает TRUE, если линия нарисована. Текущая позиция перемещается в точку, указанную в конце линии. Это позволяет  рисовать серию соединённых линий.

3) Rectangle(). Рисование прямоугольника.

Ниже приводится прототип одного из вариантов этой функции:

BOOL Rectangle(int x1,  int y1, int x1, int y2);

          Здесь x1, y1, x2, y2- соответственно координаты левого верхнего  и правого нижнего углов прямоугольника.

Пример.

pDC->Rectangle(100,100,300,405);

          Если была выбрана кисть, то она закрасит прямоугольник.

4) Ellipse(). Рисование эллипса и, как частный случай, окружности.

Ниже приводится прототип одного из вариантов этой функции:

BOOL Ellipse(int x1,  int y1, int x1, int y2);

          Здесь x1, y1, x2, y2- соответственно координаты левого верхнего  и правого нижнего углов прямоугольника, в который вписан эллипс.

Пример.

pDC->Ellipse (400,300,200,50);

          Если была выбрана кисть, то она закрасит эллипс.

5) Arc(). Рисование дуги, эллипса и, как частный случай, окружности.

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

Если будут нарисованы эллипсы или окружности, они останутся незакрашенными.

Ниже приводится прототип одного из вариантов этой функции:

BOOL Ellipse(int x1,  int y1, int x2, int y2, int x3,  int y3, int x4, int y4);

          Здесь x1, y1, x2, y2- соответственно координаты левого верхнего  и правого нижнего углов прямоугольника, в который вписана дуга .

          (x3, y3), (x4, y4)- соответственно координаты начальной и конечной точек рисуемого сегмента. Сегмент рисуется против часовой точки. Если координаты этих точек совпадают, то нарисованная кривая будет сегментом окружности.

Пример.

pDC->Arc(50,50,150,150,100,50,150,100);

6) SetPixel( x, y, цвет); Рисование по пикселям. Пиксель с координатами x,y приобретает заданный с помощью RGB() атрибут (цвет).

Пример

pDC->SetPixel(120,235,RGB(255,0,0));

          В процессе рисования может понадобиться определить текущий атрибут пикселя с заданными координатами. Для этого служит метод GetPixel(x,y); .  Он возвращает значение типа COLORREF. Чтобы узнать значение каждой в отдельности составляющей Red,Green и Blue используются соответственно функции GetRValue(), GetGValue(), GetBValue().

Пример:

COLORREF atribut;

atribut=pDC->GetPixel(200,200);

unsigned int colorRed,colorGreen,colorBlue;

colorRed=GetRValue(atribut);

colorGreen=GetGValue(atribut);

colorBlue=GetBValue(atribut);

    Если имеется массив точек и требуется соединить линией каждую последующую точку с предыдущей,можно использовать метод PolyLine(), в котором первый параметр представляет собой указатель на массив объектов класса CPoint или  элементов типа POINT, а второй- количество точек.

Пример:

CPoint a[200];

for(int i=0;i<200;i++)

{

    a[i].x=300+i;

    a[i].y=200+40*sin(0.1*(double)i);

pDC->SetPixel(i+100,i,RGB(0,0,255));

}

    В примере построение синусоиды можно было бы реализовать после выхода из цикла, применив метод

pDC->Polyline(a,200);

4 Пример функции OnDraw() для рисования

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

{

    CMyDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    if (!pDoc)

        return;

    CPen pen;//Создан объект pen- перо

    pen.CreatePen(PS_DOT,1,RGB(0,0,255));

//Создано непосредственнo само перо.Oно рисует точечную линию толщиной 1 пиксель голубого цвета

        CPen*pOldPen=pDC->SelectObject(&pen);

//Теперь это перо выбрали для работы

//Одновременнo записали адрес старого пера в указатель.

//Старое, по умолчанию, рисует сплошной, чёрной //линией, толщиной 1 пиксель

        CBrush brush(HS_DIAGCROSS,RGB(0,0,255));

//Создали кисть. Синяя диагональная штриховка

        pDC->SelectObject(brush);// Выбрали эту кисть

        pDC->MoveTo(10,10);

//Установили курсор  в точку (10,10)

//Рисуем последовательность линий