Программирование видеоадаптеров 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); } |