4.1.6. ГРАФИЧЕСКИЕ ФУНКЦИИ

Основой для применения графических функций в Windows является контекст устройства, который идентифицирует область вывода графических данных,  объявляется как  HDC hdc и служит одним из аргументов графических функций.

            Контекст устройства. Функция GetDC() устанавливает связь программы с областью вывода. Значение, возвращаемое этой функцией, называется контекстом устройства. Приведем более точное определение. Контекст устройства - это структура данных, связывающая приложение с драйвером устройства и полностью определяющая состояние драйвера и способ вывода информации.

            Программа может вывести информацию на экран только после получения контекста устройства. По окончании процесса вывода она должна этот контекст освободить, вызвав функцию ReleaseDC(). Эти функции имеют следующие прототипы:

            HDC GetDC (HWND hwnd);

            int  ReleaseDC (HWND hwnd, HDC hdc);

            Тип HDC принадлежит дескрипторам контекста устройства. Функция ReleaseDC() возвращает ненулевое значение, если она завершилась успешно.     Каждая точка области вывода, определенная контекстом устройства, имеет координаты (х,у), которые отсчитываются от левого верхнего угла, имеющего координаты (0,0). Ширина окна maxX и высота maxY могут быть получены при обработке сообщения WM_CREATE создания окна с помощью функций:           

maxX=GetSystemMetrics (SM_CXSCREEN);

            maxY=GetSystemMetrics (SM_CYSCREEN);

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

            Функции рисования. Функция

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

соединяет текущую позицию CP прямолинейным отрезком с точкой (х,у). Цвет и шаблон отрезка  определяется текущим пером.

            Функция

MoveToEx(HDC hdc, int x,int y,LPPOINT lpCoord);

переносит текущую позицию CP в точку (х,у) и сохраняет старую позицию СР в структуру POINT, адрес которой определен указателем lpCoord. Здесь LPPOINT обозначает тип POINT*. Если lpCoord=NULL, то старая позиция не сохраняется.

Функция

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

записывает точку цветом color в позицию (х,у). Здесь COLORREF обозначает 32-битовый тип данных, содержащий цвет пиксела. Если точка (х,у) не попадает в окно, то эта функция возвращает –1. Тип COLORREF содержит в младшем байте интенсивность синего, во втором – зеленого, в третьем – красного цвета. Его старший байт должен быть равен 0.

            Цвет можно получить с помощью макроса

     COLORREF RGB (int red, int green, int blue);

Например, после вызова

SetPixel (hdc, 100 , 200 , RGB(255 , 0 , 0));

на экране появится красная точка, имеющая координаты x=100, y=200.

            Функция

     BOOL Ellipse (HDC hdc,int xleft, int ytop, int xright, int ybottom);

выводит  заполненный эллипс, вписанный в прямоугольник со сторонами, параллельными осям координат. Левый верхний угол этого прямоугольника имеет координаты (xleft,ytop), а правый нижний — (xright,ybotoom). Внутренние точки эллипса закрашиваются в соответствии с шаблоном и цветом заполнения, определёнными кистью.

            Функция

BOOL Pie (HDC hdc,int xleft, int ytop, int xright, int ybottom,int   startx, int starty, int endx, int endy);

выводит заполненный сектор эллипса. Первые ее параметры аналогичны параметрам функции Ellipse(). Параметры (startx,starty) являются координатами начальной точки дуги, ограничивающей сектор, а (endx,endy) – конечной(рис. 2.5).

Рис. 2.5. Сектор Эллипса

Функция

BOOL Arc (HDC hdc, HDC hdc,int xleft, int ytop, int xright, int ybottom,int   startx, int starty, int endx, int endy);

выводит дугу, являющуюся  частью границы эллипса , вписанного в прямоугольник со сторонами параллельными осям координат. Параметры аналогичны параметрам функции Pie(). Если начало и конец дуги совпадают, то выводится вся граница

эллипса. Например, окружность с центром (xC,yC) и радиусом  r выводится с помощью вызова функции

     Arc(hdc, xC-r,yC-r,xC+r,yC+r,xC+r,yC,xC+r,yC);

            Функция

     BOOL Polygon (HDC hdc, POINT *pnts, int n);

выводит заполненный n-угольник, вершинами которого являются точки pnts[0],pnts[1],…,pnts[n-1]. Последняя точка соединяется с первой. Многоугольник закрашивается текущей кистью. Граница рисуется цветом и шаблоном пера.

            Функция

     BOOL TextOut (HDC hdc, int x,int y, LPSTR lpstr, int nlength);

выводит на экран текстовую строку, определенную указателем lpstr, начиная с точки, координаты которой задаются параметрами (x,y). Количество символов для вывода равно nlength. Функция, как и все другие графические функции типа BOOL, возвращает ненулевое значение при успешном завершении, и нулевое – при неуспешном.