Четвертый Borland C++ и его окружение

       

Управление графической системой


Ниже приводится краткое перечисление всех функций управления

графической системой:

Функция Описание

closegraph Закрывает графическую систему.
detectgraph Проверяет аппаратное обеспечение и определяет, какие графические драйверы использовать; рекомендует предпочтительный

режим.

graphdefaults Сбрасывает все переменные графической

системы в значения по умолчанию.

_graphfreemem Отменяет выделенную графике память. Используется для определения собственной подпрограммы.
_graphgetmem Распределяет память графике; используется для определения собственной подпрограммы.
getgraphmode Возвращает текущий графический режим.
getmoderange Возвращает минимальный и максимальный допустимые режимы для заданного драйвера.
initgraph Инициализирует графическую систему и переводит аппаратное обеспечение в графический режим.
installuserdriver Устанавливает дополнительный драйвер устройства в таблице драйверов устройства BGI.
installuserfont Загружает поставляемый файл векторного

(штрихового) шрифта в таблицу символьных файлов BGI.

registerbgldriver Регистрирует внешний или загруженный

пользователем файл драйвера для включения во время компоновки.

restorecrtmode Восстанавливает первоначальный (существовавший до Initgraph) режим экрана.
setgraphbufsize Задает размер внутреннего графического

буфера.

setgraphmode Выбирает заданный графический режим, очищает экран и восстанавливает все умолчания.

Графический пакет компилятора Borland C++ обеспечивает графические драйверы для следующих графических адаптеров (и полностью совместимых с ними):

  • Цветной/графический адаптер (CGA);
  • Многоцветная графическая матрица (MCGA);
  • Улучшенный графический адаптер (EGA);
  • Видеографическая матрица (VGA);
  • Графический адаптер Hercules;
  • Графический адаптер серии AT&T 400;
  • Графический адаптер 3270 PC;
  • Графический адаптер IBM 8514.
  • Для запуска графической системы вы должны прежде всего вызвать функцию 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" ("повторение символических имен"). Это предупреждение можно игнорировать.


    Содержание раздела