Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Инициализация и закрытие системы графики
Прежде чем использовать функции графической библиотеки С++, необходимо инициализировать систему графики - загрузить соответствующий адаптеру или режиму.BGI-драйвер, установить в начальные значения внешние переменные и константы, выбрать шрифт и т.д. Графические режимы, поддерживаемые библиотекой графики, задаются символическими константами, описанными в заголовочном файле <graphics.h> в перечислимом типе graphics_modes. Константы, определяющие видеорежим, приведены в табл. 3.1 вместе с информацией о выбираемом режиме и типе видеоадаптера, который может такой режим поддерживать.
Табл. 3.1. Видеорежимы в библиотеке графики
Примечание. Символом “?” обозначены режимы, не вошедшие в табл. 2. 1.
Инициализацию графической модели выполняет функция initgraph().
void far initgraph(int *graphdriver, int *graphmode, char * pathtodriver).
При вызове она инициализирует графическую систему, загружая.BGI-драйвер, определяемый указателем graphdriver, и устанавливая видеоадаптер в графический режим, задаваемый указателем graphmode. Аргумент pathtodriver указывает на ASCII-строку, хранящую спецификацию файла.BGI-драйвера. С++ поддерживает фиксированное число драйверов, каждый из которых, в свою очередь, поддерживает ряд режимов. Как тип драйвера, так и режим могут быть заданы числом или символической константой. Возможные значения для графических режимов даны в табл. 3.1. В табл. 3.2. приведены значения, определяющие графические драйверы при инициализации системы графики. Упомянутые в таблице символические константы определены в перечислимом типе graphics_drivers из заголовочного файла <graphics.h>.
Третий аргумент функции initgraph() задает маршрут поиска файла, содержащего.BGI-драйвер. Если файл не найден в заданной директории, функция просматривает текущий директорий. Если pathtodriver = NULL, драйвер должен располагаться в текущей директории. В случае, когда при вызове initgraph() параметры видеосистемы неизвестны, значение для graphdriver следует задать равным указателю на DETECT. Благодаря этому функция initgraph() вызывает другую библиотечную функцию – detectgraph() - для определения типа видеоадаптера, подходящего графического драйвера и графического режима максимального разрешения (максимального режима) для активного видеоадаптера системы. Значения для драйвера и максимального режима возвращаются в ячейках памяти, на которые указывают graphdriver и graphmode. Табл. 3.2. Задание используемого.BGI-драйвера
Помимо перевода видеоадаптера в заданный графический режим, функция initgraph() динамически распределяет оперативную память для загружаемого драйвера и хранения промежуточных результатов, возникающих при работе некоторых функций графики. После загрузки драйвера initgraph() устанавливает в значения по умолчанию ряд параметров графики: стиль линий, шаблоны заполнения, регистры палитры. С этого момента прикладная программа может использовать любую функцию, прототип которой есть в заголовочном файле <graphics.h>. Если при выполнении инициализации возникает противоречие между запрашиваемым режимом и типом видеоадаптера, либо отсутствует достаточный объем свободной оперативной памяти и т.п., функция устанавливает код ошибки во внешней переменной, доступной после вызова функции graphresult(). Кроме того, код ошибки передается в точку вызова в ячейке памяти, на которую указывает graphdriver. Если функции графической библиотеки больше не нужны прикладной программе, следует вызвать функцию closegraph() "закрытия" графического режима и возвращения к текстовому режиму. closegraph().
Эта функция освобождает память, распределенную под драйверы графики, файлы шрифтов и промежуточные данные и восстанавливает режим работы адаптера в то состояние, в котором он находился до выполнения инициализации системы. Приведем "скелет" программы, выполняющей все необходимые подготовительные действия для использования функций библиотеки графики. Для определения типа видеоадаптера в ней используется функция initgraph(). #include <graphics.h> /* все графические функции используют данный заголовочный файл */ int main(void) { int graph_driver; /* используемый драйвер */ int graph_mode; /* графический режим видеоадаптера */ /* Определение типа видеоадаптера, загрузка подходящего.BGI-драйвера и установка максимального режима. Считается, что драйвер находится на диске d: в директории \bc\bgi. */ graph_driver = DETECT; initgraph(&graph_driver, &graph_mode, "d:\\bc\\bgi”); /* Определение кода ошибки при выполнении инициализации. */ graph_error_code = graphresult(); if(graph_error_code!= grOk) /* всегда следует проверять наличие ошибки! */ { /* Обработка ошибки. return 255; */ return 255; }
/* Установка в случае необходимости режима, отличающегося от максимального; выбор палитры, цвета, стиля линий, маски заполнения и других параметров, отличающихся от значений по умолчанию. Вывод графических примитивов: прямых линий, окружностей, эллипсов, столбцовых диаграмм и т.п. */ /* 3акрытие графического режима */ closegraph(); } Наиболее защищенный способ использования функции инициализации требует предварительного уточнения типа адаптера дисплея, активного в текущий момент времени. Для этого либо вызывается функция initgraph() со значением для graphdriver, равным указателю на DETECT, либо явно вызывается функция detectgraph(). Только после определения типа адаптера и его максимального режима выполняются установка нужного пользователю режима и загрузка.BGI-драйвера. Далее приводится описание функции detectgraph().
void detectgraph (int *graphdriver, int *graphmode).
Определяет тип активного видеоадаптера системы и тип подключенного монитора в персональном компьютере. Затем устанавливает тип подходящего для комбинации адаптер/монитор.BGI-драйвера и режим, обеспечивающий максимальное разрешение (максимальный режим). Например, если активным является CGA-адаптер, С++ считает режим 640 х 200 максимальным. Информация о подходящем драйвере и максимальном режиме возвращается в точку вызова в двух переменных, на которые указывают graphdriver и graphmode соответственно.
Прикладная программа может интерпретировать тип драйвера и максимальный режим, сравнивая возвращаемые значения с символическими константами, приведенными в табл. 3.1. и 3.2. В случае, если адаптер не способен работать ни в одном из графических режимов, функция устанавливает внутреннюю переменную кода ошибки в значение, равное grNotDetected (-2). На это же значение будет указывать и graphdriver при завершении функции. Как отмечалось ранее, функция detectgraph() вызывается автоматически из функции инициализации видеосистемы initgraph(), если последняя вызывается со значением для graphdriver, равным указателю на DETECT. В отличие от функции detectgraph() функция инициализации продолжает свою работу, загружает драйвер и устанавливает максимальный режим, рекомендованный (возвращенный) функцией detectgraph(). Функция detectgraph(), вызванная явно, не производит загрузку драйвера или установку режима. Для этого прикладная программа выполняет обращение к функции инициализации. В случае, если для функции initgraph(), вызываемой после явного обращения к detectgraph(), передаются параметры, возвращенные detectgraph(), получается такой же результат, что и при обращении к initgraph() с параметром graphdriver, равным указателю на DETECT. В этой связи раздельное обращение к detectgraph() и initgraph() имеет смысл лишь в случае, когда предполагается установка режима адаптера, отличающегося от максимального, т.е. если неприемлемы автоматические выбор и установка режима адаптера.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-06-06; просмотров: 229; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.112.1 (0.013 с.) |