В приведенной функции Line( ) нет параметров для задания цвета и толщины линии. Чтобы уменьшить количество параметров, эти характеристики задаются отдельными функциями и действуют для всех последующих операций вывода примитивов, пока не будут изменены. Такие характеристики называются атрибутами примитива. Таким образом, в нашей трактовке цвет и толщина линии являются атрибутами примитива «отрезок», а координаты его концов - нет, потому что они заданы параметрами примитива Line( ).

Заметим, что в такой библиотеке, как OpenGL, для отображения примитива вызывается последовательность из нескольких функций, поэтому примитив определяют также как элементарное изображение, которое не составлено из нескольких, более мелких составных частей, для рисования которых используются функции вывода графических примитивов.

Чтобы формировать простейшие изображения до начала систематического изучения графического интерфейса GDI, укажем, что нарисовать прямоугольник по щелчку мыши в окне hWnd можно, вставив в оконную процедуру фрагмент кода, приведенный в листинге 3.1.

Листинг 3.1

case WM_RBUTT0ND0WN: {HDC de - GetDC(hWnd);
RectangleCdc.10.10.100.100);
ReleaseDC(hWnd.dc); break; }

По умолчанию в рабочей области окна задана система координат с началом в левом верхнем углов и осями, направленными вправо и вниз. Последние четыре параметра функции Rectangl e(dc. 10.10.100.100) задают координаты левого верхнего и правого нижнего угла четырехугольника в системе рабочей области. Первый параметр de дает доступ к внутрисистемной структуре данных - контексту устройства. В контексте хранится информация о том, в какое окно производится вывод,

Элементы компьютерной графики

каковы размеры рабочей области окна hWnd и в какой точке экрана находится начало координат рабочей области. Без доступа к контексту функция RectangleO не знала бы, где на экране рисовать точку. Невозможно было бы также отсекать части фигуры, выступающие за пределы рабочей области окна.

Таким образом, контекст устройства формируется для вывода графического примитива в конкретном окне. Поэтому первый оператор dc = Get DC ( hWnd ), который создает и заполняет контекст устройства, получает в качестве параметра дескриптор окна. Третий оператор Rel easeDCChWnd. dc ) сообщает системе, что связанный с окном hWnd контекст de больше не нужен.


⇐ Предыдущая| |Следующая ⇒