Программирование видеоадаптеров CGA, EGA и VGA

       

Функция _rectangle()


Функция рисует прямоугольник. В зависимости от параметров функции прямоугольник может быть закрашенным или не закрашенным. Прототип функции имеет следующий вид:

short _rectangle( short fill, short x_left, short y_top, short x_right, short y_bottom );

Прямоугольник определяетя координатами любых двух противоположных углов (x_left,y_top) и (x_right,y_bottom).

Граница прямоугольника изображается текущим цветом с использованием текущего стиля. Если например fill равен _GFILLINTERIOR, то прямоугольник закрашивается, а если _GBORDER - то не закрашивается. Для изменения текущего цвета используют функцию _setcolor().

Функция возвращает ненулевую величину, если она выполнилась успешно и ноль, если произошла ошибка.

Следующая программа иллюстрирует использование функций _moveto(), _lineto() и __rectangle():

#include <conio.h> #include <stdlib.h> #include <stdio.h> #include <graph.h>

// макроопределение, ранжирующее величину, возвращаемую // генератором случайных чисел (rand) в интервале от 0 // до max

#define random(max) (rand() % (int)((max)+1))

void main(void) {

short x, y; short color; struct videoconfig vc;

// устанавливаем графический режим с максимальным числом цветов

if(!_setvideomode(_MAXCOLORMODE)) { puts("Видеоадаптер не поддерживает графический режим."); exit(1); }

// получаем информацию о конфигурации видеосистемы и об // установленном режиме работы видеоадаптера

_getvideoconfig(&vc);

while(!kbhit()) {



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

_setcolor((short)random(vc.numcolors));

// выбираем произвольную точку экрана - (x,y) x = (short)random(vc.numxpixels), y = (short)random(vc.numypixels);

// рисуем закрашенный и незакрашенный прямоугольники

_rectangle(_GFILLINTERIOR, x + 30, y + 40, x, y); _rectangle(_GBORDER, x + 40, y + 30, x, y); }

// ожидаем нажатие на клавиатуру

getch();

// помещаем текущую точку в центр экрана

_moveto(vc.numxpixels/2, vc.numypixels/2);

while(!kbhit()) { _setcolor((short)random(vc.numcolors)); x = (short)random(vc.numxpixels), y = (short)random(vc.numypixels);

// рисуем линию из центра экрана в произвольную точку экрана _lineto(x, y); _moveto(vc.numxpixels/2, vc.numypixels/2); } getch();

// устанавливаем режим видеоадаптера, принятый по умолчанию

_setvideomode(_DEFAULTMODE); }



Содержание раздела