Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИГС / Labor_01.doc
Скачиваний:
13
Добавлен:
17.04.2018
Размер:
524.8 Кб
Скачать

Аналогичную схему создания и уничтожения пера можно представить в виде.

hpen1 = CreatePen(PS_SOLID, 3, RGB(255, 255, 0));

hpenOld = (HPEN)SelectObject(hdc, hpen1);

 //рисование

SelectObject(hdc, hpenOld);

DeleteObject(hpen1);

Отметим, что созданная кисть имеет следующие параметры: стиль - сплошной, толщина 3 пиксела, цвет - ярко-желтый.

.

Графические примитивы api Windows.

Операционная система Windows предоставляет программистам возможность использовать в своих программах сотни разнообразных функций, доступ к которым сделан в виде интерфейса API (Application Program Interface). Графические функции из состава API Windows объединены в отдельную группу – подсистему GDI (Graphic Device Interface).

Рассмотрим функции API Windows, которые рисуют графические примитивы. Под графическими примитивами понимают минимальные графические объекты, которые составляют рисунок, подобно кирпичам, из которых строится здание. Нас будут интересовать функции, которые рисуют графические примитивы, такие как точка, отрезок прямой, дуга окружности или эллипса, прямоугольник и т.п. Подробную информацию о графических функциях, которые будем рассматривать, можно найти в справке (Help) компилятора Visual C++.

Начнем с функции SetPixel, рисующей один пиксел растра. Прототип этой функции имеет вид.

COLORREF SetPixel(HDC hdc, int x, int y, COLORREF crColor);

Здесь hdc – контекст устройства, x, y - координаты пиксела, crColor – цвет пиксела. Цвет удобно задавать с помощью макроса RGB.

crColor = RGB (Red, Green, Blue);

Компоненты цвета Red, Green, Blue лежат в диапазоне от 0 до 255 каждая. Для получения цвета любого пиксела растра можно использовать функцию GetPixel.

COLORREF GetPixel(HDC hdc, int x, int y);

Теперь рассмотрим API–функции, рисующие линии, которые являются отрезками или дугами, или их комбинациями. Для рисования отрезка прямой линии используются функции MoveToEx и LineTo.

BOOL MoveToEx(HDC hdc, int x, int y, POINT *lpPoint);

BOOL LineTo(HDC hdc, int x, int y );

Ниже показано, как можно нарисовать отрезок между точками (x1,y1) и (x2,y2) используя эти две функции.

MoveToEx(hdc, x1, y1, NULL);

LineTo(hdc, x2, y2);

Для рисования ломаной линии можно использовать функцию PolyLine.

BOOL PolyLine(HDC hdc, CONST POINT *lppt, int cPoints);

Здесь hdc – контекст устройства, lppt – указатель на массив точек, cPoints – число точек.

Ниже показано, как можно нарисовать ломаную линию, используя эту функцию по четырем вершинам с координатами (x0,y0), (x1,y1), (x2,y2), (x4,y4).

POINT P[4];

P[0].x = x0; P[0].y = y0;

P[1].x = x1; P[1].y = y1;

P[2].x = x2; P[1].y = y2;

P[3].x = x3; P[1].y = y3;

PolyLine(hdc, P, 4);

Для рисования дуги эллипса можно использовать функцию Arc.

BOOL Arc(HDC hdc, int x1, int y1, int x2, int y2,

int xSt, int yStr, int xEn, int yEn);

Здесь hdc – контекст устройства, x1,y1,x2,y2 – координаты прямоугольника, ограничивающего эллипс, xSt, yStr – координаты конца первого радиуса, ограничивающего дугу, xEn, yEn – координаты конца второго радиуса, ограничивающего дугу. Ниже показано, как можно нарисовать дугу эллипса, используя эту функцию.

Arc(hdc, x1, y1, x2, y2,

xSt, yStr, xEn, yEn);

Другие графические API - функции, рисующие линии можно найти в справке (Help) компилятора Visual C++.

Теперь рассмотрим графические функции рисующие фигуры с закрашиванием, заливкой. Для рисования прямоугольника можно использовать функцию Rectangle.

BOOL Rectangle(HDC hdc, int x1, int y1, int x2, int y2);

Здесь hdc – контекст устройства, x1,y1,x2,y2 – координаты прямоугольника. Ниже показано, как можно нарисовать прямоугольник с заливкой, используя эту функцию.

Rectangle(hdc, x1, y1, x2, y2);

Для рисования эллипса с заливкой можно использовать функцию Ellipse.

BOOL Ellipse(HDC hdc, int x1, int y1, int x2, int y2);

Здесь hdc – контекст устройства, x1,y1,x2,y2 – координаты прямоугольника, ограничивающего эллипс. Ниже показано, как можно нарисовать эллипса заливкой, используя эту функцию.

Ellipse(hdc, x1, y1, x2, y2);

Для рисования сектора эллипса с заливкой можно использовать функцию Pie.

BOOL Pie(HDC hdc, int x1, int y1, int x2, int y2,

int xSt, int yStr, int xEn, int yEn);

Здесь hdc – контекст устройства, x1,y1,x2,y2 – координаты прямоугольника, ограничивающего эллипс, xSt, yStr – координаты конца первого радиуса, ограничивающего сектор, xEn, yEn – координаты конца второго радиуса, ограничивающего сектор. Ниже показано, как можно нарисовать сектор эллипса с заливкой, используя эту функцию.

Pie(hdc, x1, y1, x2, y2,

xSt, yStr, xEn, yEn);

Для рисования сегмента эллипса (хорды эллипса) с заливкой можно использовать функцию Pie.

BOOL Chord(HDC hdc, int x1, int y1, int x2, int y2,

int xSt, int yStr, int xEn, int yEn);

Здесь hdc – контекст устройства, x1,y1,x2,y2 – координаты прямоугольника, ограничивающего эллипс, xSt, yStr – координаты конца первого радиуса, ограничивающего сегмент, xEn, yEn – координаты конца второго радиуса, ограничивающего сегмент. Ниже показано, как можно нарисовать сегмент эллипса с заливкой, используя эту функцию.

Chord(hdc, x1, y1, x2, y2,

xSt, yStr, xEn, yEn);

Для рисования полигона с заливкой можно использовать функцию Polygon.

BOOL Polygon(HDC hdc, CONST POINT *lppt, int cPoints);

Здесь hdc – контекст устройства, lppt – указатель на массив точек, cPoints – число точек.

Ниже показано, как можно нарисовать полигон с заливкой, используя эту функцию по четырем вершинам с координатами (x0,y0), (x1,y1), (x2,y2), (x4,y4).

POINT P[4];

P[0].x = x0; P[0].y = y0;

P[1].x = x1; P[1].y = y1;

P[2].x = x2; P[1].y = y2;

P[3].x = x3; P[1].y = y3;

Polygon (hdc, P, 4);

Соседние файлы в папке ИГС