Пиксели, линии, дуги, прямоугольники, эллипсы и секторы




 

Установка цвета пикселя. Цвет отдельного пикселя можно установить при помощи функции API SetPixel(), имеющей следующий прототип:

COLORREF SetPixel(HDC hdc, int X, int У, COLORREF color);

 

Здесь hdc задает контекст устройства вывода, X и Y – координаты точки, в которой необходимо установить нужный цвет, a color – задаваемый для пикселя цвет. Тип данных COLORREF описан в гл. 8. Эта функция возвращает:

· прежний цвет пикселя в случае успешного завершения;


· –1 при возникновении ошибки, или же тогда, когда точка с заданными координатами не попадает в рабочую область окна.

Рисование линий. Для рисования линий используется функция API LineTo(). Цвет и способ рисования линий определяется текущим пером. Вот прототип этой функции:

 

BOOL LineTo(HDC hdc, int X, int Y);

Параметр hdc задает дескриптор контекста устройства вывода. Линия рисуется от текущей графической позиции до точки с координатами, задаваемыми параметрами Х и Y. После этого текущая позиция также устанавливается в точке X, Y. При успешном завершении (то есть когда линия нарисована) эта функция возвращает ненулевое значение. При возникновении ошибки возвращается 0.

У некоторых программистов такая схема рисования вызывает недоумение. По­нятно, что функция LineTo() использует для определения начала линии текущую графическую позицию. Однако почему затем координаты текущей позиции изме­няются, а не остаются неизменными? – Причина в том, что во многих случаях при рисовании ломаных линий каждый следующий отрезок линии начинается там, где заканчивается предыдущий. В этом случае функция LineTo() работает очень эффек­тивно, самостоятельно изменяя координаты текущей позиции и не требуя дополни­тельных вызовов функции для их установки и передачи параметров, задающих начальную точку каждого отрезка линии. В некоторых случаях текущую позицию можно устанавливать при помощи функции API MoveToEx(), которая описана ниже, вызывая ее непосредственно перед вызовом функции LineTo().

 

Установка текущей позиции. Для установки текущей позиции используется функция MoveToEx():

 

BOOL MoveToEx(HOC hdc, int X, int Y, LPPOINT lpCoord);

 

Здесь параметр hdc определяет контекст устройства вывода, координаты новой текущей позиции задаются параметрами Х и Y, а координаты старой текущей позиции возвращаются в структуре POINT, указатель на которую передается в параметре lpCoord. Структура POINT определяется следующим образом:

 

typedef struct tagPOINT

{

LONG x;

LONG y;

} POINT;

 

Если значение параметра lpCoord равно NULL, функция MoveToEx() не возвра­щает координаты старой текущей позиции. Функция MoveToEx() возвращает нену­левое значение в случае успешного завершения и нуль при возникновении ошибки.

 

 

Рисование дуги. Используя функцию API Arc(), можно нарисовать эллиптическую дугу (часть эллипса) цветом и способом, задаваемыми текущим пером. Дуга рисуется против часовой стрелки. Работа функции Агс() показана на рис. 9.1.

Рис. 9.1. Результаты работы функции Arc()

 

Прототип этой функции имеет следующий вид:

 

BOOL Arc(HDC hdc, int upX,int upY, int lowX, int lowY, int startX, int startY, int endX, int endY);

 

Здесь hdc представляет контекст устройства вывода, на котором будет нарисована дуга. Сама дуга определяется двумя объектами. Во-первых, она является частью эллипса, ограниченного, в свою очередь, прямоугольником (вписанного в прямоу­гольник), координаты которого задаются координатами левого верхнего (параметры upX и upY) и правого нижнего (параметры lowX и lowY) углов. Часть эллипса, которая будет нарисована (т.е. дуга), начинается в точке его пересечения с линией, проходя­щей через центр прямоугольника и точку, задаваемую координатами startX и startY, a заканчивается в точке пересечения эллипса с линией, проходящей через центр прямоугольника и точку с координатами endX и endY.

 

Рисование прямоугольников. Нарисовать прямоугольник, используя текущее перо, можно при помощи функ­ции API Rectangle():

 

BOOL Rectangle(HDC hdc, int upX, int upY, int lowX, int lowY);


Как обычно, hdc представляет контекст устройства. Координаты левого верхнего угла прямоугольника задаются параметрами upХ и upY, а правого нижнего угла – параметрами lowX и lowY. При успешном завершении функция возвращает ненулевое значение и нуль – в случае возникновения ошибки. Прямоугольник автоматически заполняется цветом и способом, задаваемыми текущей кистью.

Можно также нарисовать скругленный прямоугольник (прямоугольник со скругленными углами). Это делается при помощи функции API RoundRect(), прототип которой имеет следующий вид:

 

BOOL RoundRect(HDC hdc, int upX, int upY, int lowX, int lowY, int curveX, int curveY);

 

Первые пять параметров этой функции имеют такое же назначение, что и в функции Rectangle(). Закругление углов прямоугольника определяется параметрами curveX и curveY, которые задают соответственно ширину и высоту эллипса, опреде­ляющего дуги. При возникновении ошибки эта функция возвращает 0, а при успешном завершении – ненулевое значение. Скругленный прямоугольник автома­тически заполняется цветом и способом, определяемыми текущей кистью.

 

Рисование эллипсов и секторов. Для того чтобы нарисовать эллипс или круг, используя атрибуты текущего пера, необходимо вызвать функцию Ellipse():

 

BOOL Ellipse(HDC hdc, int upX, int upY, int lowX, int lowY);

 

Здесь hdc задает контекст устройства вывода, на котором будет нарисован эллипс. Сам эллипс определяется через ограничивающий его (описывающий) прямоуголь­ник. Координаты верхнего левого угла этого прямоугольника задаются параметрами uрХ и upY, а правого нижнего угла – параметрами lowX и lowY. Чтобы нарисовать круг, необходимо задать равносторонний описывающий квадрат. Эта функция возвращает ненулевое значение при успешном завершении и нуль в случае возникновения ошибки. Эллипс заполняется цветом и атрибутами текущей кисти. Сектор эллипса – это объект, состоящий из дуги эллипса и линий, соеди­няющих концы дуги с точкой в центре эллипса. Для рисования сектора эллипса используется функция Pie(), прототип которой выглядит так:

 

BOOL Pie(HDC hdc, int uрХ, int upY, int lowX, int lowY, int startX, int startY, int endX, int endY);

 

Здесь hdc – это дескриптор контекста устройства, на котором рисуется сектор. Дуга сектора определяется двумя объектами – собственно эллипсом и ограничиваю­щим его прямоугольником, координаты которого задаются параметрами uрХ, upY (левый верхний угол) и lowX, lowY (правый нижний угол). Дуга начинается в точке пересечения эллипса с линией, проходящей через центр ограничивающего прямоу­гольника и точку с координатами startX, startY, а заканчивается в точке пересечения эллипса с линией, проходящей через центр ограничивающего прямоугольника и точку с координатами endX, endY.

Сектор эллипса рисуется цветом и атрибутами текущего пера и заполняется цветом и атрибутами текущей кисти. Функция Pie() возвращает ненулевое значение при успешном завершении и нуль в случае возникновения ошибки.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: