Для функций изображения графических элементов (таких, например, как line, lineto, putpixel) видеопамять разбита на страницы, количество которых зависит от номера графического драйвера и режима. Каждая такая функция может производить вывод только в страницу, называющуюся активной. Чтобы изменить номер активной страницы, употребляется функция voidsetactivepage(intpagenum), где pagenum — номер активизируемой страницы. При инициализации графического режима номер активной страницы устанавливается на нуль. Если требуется очистить активную страницу, то применяется функция voidcleardevice(void). Заметим, что функция cleardevice устанавливает CP в (0,0)
На экране отображается страница, которая не обязательно является активной. Чтобы установить номер страницы, отображаемой на экране, применяется функция voidsetvisualpage(intpagenum), где pagenum — номер страницы, которая становится отображаемой (видимой).
Данные функции применяются для мультипликации. Для примера рассмотрим программу изображения треугольника, движущегося в горизонтальном направлении
#include <graphics.h>
#include <conio.h>
#include <dos.h>
// Построение треугольника
void trirel (int dx1, int dy1, int dx2, int dy2)
{
int x=getx(), y=gety();
linerel(dx1, dy1); moveto(x, y);
linerel(dx2, dy2);
line(x+dx1, y+dy1, x+dx2, y+dy2);
}
main()
{
int gdriver=DETECT, gmode, npage=0;
float x0=0, y0=100, x1=70, y1=100, x2=100, y2=0;
float x=x0, y=y0;
// Инициализация графического режима
initgraph(&gdriver, &gmode, "D:\BC\BGI");
while(!kbhit())
{
npage++;
// Выбор в качестве активной страницы
// с номером npage%2
setactivepage(npage%2);
cleardevice();
moveto(x,y);
// Вывод треугольника
trirel(x1-x0, y1-y0, x2-x0, y2-y0);
// Выбор в качестве видимой страницы
// с номером npage%2
setvisualpage(npage%2);
delay(20);
x++;
}
getch();
closegraph();
}