Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Программирование видеоадаптеров 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);
}
[Назад] [Содеожание] [Дальше]