Управление графической системой
Ниже приводится краткое перечисление всех функций управления
графической системой:
closegraph | Закрывает графическую систему. |
detectgraph | Проверяет аппаратное обеспечение и определяет, какие графические драйверы использовать; рекомендует предпочтительный
режим. |
graphdefaults | Сбрасывает все переменные графической
системы в значения по умолчанию. |
_graphfreemem | Отменяет выделенную графике память. Используется для определения собственной подпрограммы. |
_graphgetmem | Распределяет память графике; используется для определения собственной подпрограммы. |
getgraphmode | Возвращает текущий графический режим. |
getmoderange | Возвращает минимальный и максимальный допустимые режимы для заданного драйвера. |
initgraph | Инициализирует графическую систему и переводит аппаратное обеспечение в графический режим. |
installuserdriver | Устанавливает дополнительный драйвер устройства в таблице драйверов устройства BGI. |
installuserfont | Загружает поставляемый файл векторного
(штрихового) шрифта в таблицу символьных файлов BGI. |
registerbgldriver | Регистрирует внешний или загруженный
пользователем файл драйвера для включения во время компоновки. |
restorecrtmode | Восстанавливает первоначальный (существовавший до Initgraph) режим экрана. |
setgraphbufsize | Задает размер внутреннего графического
буфера. |
setgraphmode | Выбирает заданный графический режим, очищает экран и восстанавливает все умолчания. |
Графический пакет компилятора Borland C++ обеспечивает графические драйверы для следующих графических адаптеров (и полностью совместимых с ними):
Для запуска графической системы вы должны прежде всего вызвать функцию initgraph. Функция initgraph загружает графический
драйвер и переводит систему в графический режим.
Вы можете указать для функции initgraph использование конкретного графического драйвера и конкретный режим, либо задать автообнаружение установленного видеоадаптера и выбор соответственного драйвера уже во время выполнения. Если вы задали в функции
initgraph автообнаружение, то она сама вызовет функцию detectgraph для выбора графического драйвера и режима. Если вы задали в
initgraph использование конкретного графического драйвера и режима, то вы сами отвечаете за физическое присутствие соответствующего аппаратного обеспечения. Если заставить initgraph пытаться использовать отсутствующее аппаратное обеспечение, то результат в
таком случае непредсказуем.
После того, как графический драйвер загружен, вы можете определить его имя при помощи функции getdrivename, а число поддерживаемых драйвером режимов - при помощи функции getmaxmode. Функция getgraphmode сообщит вам, в каком графическом режиме вы находитесь в текущий момент. Имея номер режима, вы можете определить
его имя при помощи функции getmodename. Вы также имеете возможность изменить графический режим при помощи функции setgraphmode
и вернуть исходный видеорежим (тот, который был установлен до
инициализации графики) с помощью restorecrtmode. Функция restorecrtmode вернет экран в текстовый режим, но не закроет при этом
графическую систему (загруженные шрифты и драйверы останутся в
памяти).
Функция graphdefaults сбрасывает установки состояния графической системы (размеры графического окна, цвет линий, цвет и
шаблон заполнителя и т.д.) в исходное состояние. Функции installuserdriver и installuserfont позволяют установить в графической
системе новые драйверы устройства и шрифты.
И наконец, закончив работу в графике, вы должны вызвать
функцию closegraph для того, чтобы закрыть графическую систему.
Функция closegraph выгружает драйвер из памяти и восстанавливает
первоначальный видеорежим (через обращение к restorecrtmode).
Обычно подпрограмма initgraph загружает графический драйвер,
распределяя для этого драйвера память и затем загружая туда с
диска соответствующий файл .BGI. В качестве альтернативы данной
схеме динамической загрузки вы можете скомпоновать нужный файл
графического драйвера (или несколько таких файлов) непосредственно с файлом выполняемой программы. Для этого файл .BGI сначала
преобразуется в файл .OBJ (при помощи утилиты BGIOBJ - см. документацию в файле UTIL.DOC, который поставляется на одном из дистрибутивных дисков), после чего в исходный код помещается вызов
функции registerbgidriver (до вызова initgraph), чтобы зарегистрировать графический драйвер(ы) в системе. При построении программы вы должны выполнить компоновку файлов .OBJ всех зарегистрированных драйверов.
После определения того, какой графический драйвер должен использоваться (посредством detectgraph) функция initgraph проверяет, был ли желаемый драйвер зарегистрирован. Если был, то initgraph обращается к зарегистрированному драйверу непосредственно в памяти. В противном случае функция initgraph распределяет память для драйвера и загружает нужный файл .BGI с диска.
Использование функции registerbgidriver относится к более
сложным методам программирования, не рекомендуемым для начинающих
программистов.
Во время выполнения графической системе может понадобиться
распределить память для драйверов, шрифтов и внутренних буферов.
При необходимости она вызывает функцию _graphgetmem для распределения памяти и функцию _graphfreemem для ее освобождения. По
умолчанию данные подпрограммы просто вызывают функции malloc и
free, соответственно.
Действие этих функций по умолчанию можно переопределить, определив собственные функции _graphgetmem и _graphfreemem. Благодаря этому вы можете сами управлять распределением памяти для
графики. Однако, ваши варианты функций управления распределением
памяти должны иметь те же имена: они заменят собой используемые
по умолчанию функции с теми же именами из стандартных библиотек
языка Си.
Определив собственные функции _graphgetmem и _graphfreemem,
вы можете получить предупреждение "duplicate symbols" ("повторение символических имен"). Это предупреждение можно игнорировать.