Программирование видеоадаптеров CGA, EGA и VGA© Александр Фролов, Григорий ФроловТом 3, М.: Диалог-МИФИ, 1992, 287 стр. 15.4. Функция _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);
}
|

