Лабораторная работа: Программирование в СИ

Аргумент функции – имя указателя на место в памяти, содержащее регистрируемый драйвер. Имена подобных указателей уже определены в объектных файлах, созданных при помощи утилиты bgiobj.exe. Ниже приведены прототипы функций, имена которых нужно употреблять для стандартных драйверов:

void CGA_driver(void);void EGAVGA_driver(void);void IBM8514_driver(void);void Herc_driver(void);void ATT_driver(void);void PC3270_driver(void).

Если регистрация прошла успешно, функция graphresult возвратит нулевое значение, в противном случае -4. После регистрации драйвера можно инициализировать графическую систему при помощи функции initfgraph, при этом ее третий параметр не используется (передается нулевая строка “”).

Пример статической загрузки драйвера и инициализации системы:

int main(void){int gd,gm,err;detectgraph(&gd,&gm); err=graphresult(); if(err) { printf(?\n%s?,grapherrormsg(err)); return 1; }registerbgidriver(EGAVGA_driver); err=graphresult(); /* ??????????????????????? */if(err) { printf(?\n%s?,grapherrormsg(err)); return1; }initgraph(&gd,&gm,""); /* ????????????? ??????? */if((err = graphresult()) != grOk) { printf(?\n%s?,grapherrormsg(err)); return1; }/* ................????????? ?????????..............*/closegraph(); /* ?????????? ?????? ??????? */return 0;}

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

Имя текущего графического драйвера можно узнать с помощью функции

char far *getdrivername(void);

Она возвращает указатель на строку, содержащую имя активного в данный момент драйвера.

Максимальное значение номера графического режима, допустимое для текущего графического драйвера, можно узнать с помощью функции

int far getmaxmode(void);

Текущее значение номера графического режима для активизированного драйвера возвращает функция

int far getgraphmode(void);

По номеру режима можно получить строку с описанием данного режима для текущего драйвера. Это делается с помощью функции

char far *getmodename(int mode_number);

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

void far getmoderange(int graph_driver,int far *min_mode,int far *max_mode);

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

void far setgraphmode(int new_mode);

Аргумент new_mode передает желаемый номер режима для текущего драйвера и не должен превосходить максимально допустимое для этого драйвера значение.

Для временного перехода в текстовый режим предусмотрена
функция

void far restorecrtmode(void);

Эта функция переводит видеоадаптер в тот текстовый режим, в котором он находился в момент последней инициализации графической системы, т. е. непосредственно перед обращением к функции initgraph. Из текстового режима можно вернуться в графический при помощи функции setgraphmode.

При инициализации графической системы всевозможные параметры системы устанавливаются по умолчанию. Различные функции могут менять значения параметров. Для того чтобы в любой момент восстановить характеристики системы, установленные при ее инициализации, существует функция

void far graphdefaults(void);

Перечислим действия, выполняемые данной функцией:

· для вывода и отображения на экране выбирается нулевая страница видеопамяти;

· графическое окно устанавливается размером во всю страницу;

· текущая графическая позиция перемещается в точку (0,0);

· устанавливаются по умолчанию цвета палитры, текущий рисующий цвет (15) и цвет фона (0);

· устанавливается сплошной шаблон для рисования линий и заполнения областей;

· инициализируется встроенный матричный шрифт со стандартным расположением и позиционированием строки.

1.3. Работа с растром точек

Растром точек называется двумерная совокупность точек, представляющая экран дисплея.

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

void far setvisualpage(int page);

Функция немедленно отображает на экране ту страницу видеопамяти, номер которой был ей передан в качестве аргумента. Страницы нумеруются с нуля. Функция graphresult не реагирует на попытку установить недопустимый номер страницы. Вся ответственность за правильность указанного номера лежит на программисте. Функция

void far setactivepage(int page);

не вызывает перерисовки страницы на экране дисплея, но зато направляет весь последующий графический вывод на ту страницу, которая указана ее аргументом. Как и при вызове предыдущей функции, ответственность за допустимость номера страницы остается на программисте.

Страницу видеопамяти (и экран дисплея) можно представить как двумерный прямоугольный массив точек (пикселей). На этом массиве точек вводится система координат X, Y. Начало системы лежит в левом верхнем углу страницы (экрана). Ось X проходит по верхнему краю страницы слева направо, а ось Y – по левому краю сверху вниз. Левая верхняя точка страницы имеет координаты (0, 0), правая нижняя – координаты (M-1, N-1), где M и N – размеры страниц по горизонтали и вертикали.

Определить максимальные значения координат точек можно с помощью функций

int far getmaxx(void);int far getmaxy(void);

Значения, возвращаемые этими функциями, зависят только от текущего режима, установленного функциями initgraph или setgraphmode.

К-во Просмотров: 289
Бесплатно скачать Лабораторная работа: Программирование в СИ