Программирование видеоадаптеров CGA, EGA и VGA© Александр Фролов, Григорий ФроловТом 3, М.: Диалог-МИФИ, 1992, 287 стр. 14.12. Функция _setvideomode()Это одна из наиболее важных функций. Она позволяет изменить режим работы видеоадаптера. Ее формат имеет следующий вид: short _setvideomode( short mode ); Параметр функции - mode - определяет новый режим и может быть равен одной из констант, представленных в таблице 15.2. Данные константы определены во включаемом файле graph.h. Константа Режим Характеристики _TEXTBW40 0, 1 текстовый, 40x25, 16 градаций серого цвета _TEXTC40 0, 1 текстовый, 40x25, 16 цветов _TEXTBW80 2, 3 текстовый, 80x25, 16 градаций серого цвета _TEXTC80 0, 1 текстовый, 80x25, 16 цветов _MRES4COLOR 4, 5 графический, 320x200, 4 цвета _MRESNOCOLOR 4, 5 графический, 320x200, 4 градации серого цвета _HRESBW 6 графический, 640x200, 2 градации серого цвета _TEXTMONO текстовый, 80x25, монохромный _HERCMONO Hercules графический, 720x348, монохромный _MRES16COLOR 0Dh графический, 320x200, 16 цветов _HRES16COLOR 0Eh графический, 640x200, 16 цветов _ERESNOCOLOR 0Fh графический, 640x350, монохромный _ERESCOLOR 10h графический, 640x350, 16 цветов _VRES2COLOR 11h графический, 640x480, 2 цвета _VRES16COLOR 12h графический, 640x480, 16 цветов _MRES256COLOR 13h графический, 320x200, 256 цветов _ORESCOLOR Olivetti графический, 640x400, 1 из 16 видеоадаптер фирмы Olivetti _DEFAULTMODE режим, используемый видеоадаптером по умолчанию _MAXRESMODE графический режим с наивысшим разрешением доступным на данном видеоадаптере _MAXCOLORMODE графический режим с наибольшим числом цветов поддерживаемых видеоадаптером Таблица 15.2 Режимы работы видеоадаптеров. Характеристики последних трех режимов, перечисленных в таблице, зависят от типа используемого видеоадаптера и дисплея. Функция _setvideomode() возвращает число текстовых строк в установленном режиме работы видеоадаптера. Если произошла ошибка, например запрашиваемый режим не поддерживается видеоадаптером, функция возвращает ноль. В таблице 15.3 перечислены режимы, используемые для констант _MAXRESMODE и _MAXCOLORMODE в зависимости от конфигурации видеоситемы. Видеоадаптер _MAXRESMODE _MAXCOLORMODE дисплей MDA нет нет Hercules _HERCMONO _HERCMONO CGA с CD _HRESBW _MRES4COLOR CGA с MD _HRESBW _MRESNOCOLOR OCGA (фирма _ORESCOLOR _MRES4COLOR Olivetti) OCGA с CD _ORESCOLOR _ERESCOLOR EGA (256K) с CD _HRES16COLOR _HRES16COLOR EGA (64K) с CD _HRES16COLOR _HRES16COLOR EGA(256K) с ECD _ERESCOLOR _ERESCOLOR EGA (64K) с ECD _ERESCOLOR _HRES16COLOR EGA с MD _ERESNOCOLOR _ERESNOCOLOR MCGA _VRES2COLOR _MRES256COLOR VGA _VRES16COLOR _MRES256COLOR OVGA (фирма _VRES16COLOR _MRES256COLOR Olivetti) Таблица 15.3 Режимы _MAXRESMODE и _MAXCOLORMODE. Режимы TEXTC40, TEXTBW40 и TEXTC80, TEXTBW80 различаются только используемой цветовой палитрой. В режимах TEXTBW40 и TEXTBW80 могут отображаться только градации серого цвета. Видеоадаптер Hercules может работать в режиме _HERCMONO. Это монохромный режим с разрешением 720x348 пикселов. Он обеспечивает отображение 25 текстовых строк по 80 символов в каждой. При этом матрица символов имеет размер 9x14 пикселов. Перед исполнением вашей программы в режиме _HERCMONO надо установить специальный драйвер видеоадаптера Hercules - программу msherc.com. Программу msherc.com можно запустить либо перед выполнением прикладной программы, либо непосредственно из нее (напрмер запустив ее при помощи функций system или exec). При одновременном использовании видеоадаптеров Hercules и EGA, надо запускать программу msherc.com с ключом /H (Half - половина). После этого видеоадаптер Hercules будет использовать только одну из двух страниц видеопамяти, что позволяет избежать конфликтов между видеоадаптерами. Теперь приведем простой пример, использующий функцию _setvideomode. Программа сначала пытается перевести видеоадаптер в цветной графический режим _MRES16COLOR, а если адаптер его не поддерживает, то в режим _MRES4COLOR с такой же разрешающей способностью, но меньшим числом цветов. // Пример использования функций _setvideomode() и _outtext(). #include <conio.h> #include <graph.h> void main(void) { // пытаемся установить режим _MRES16COLOR if(_setvideomode(_MRES16COLOR)) _outtext("установлен режим _MRES16COLOR"); // пытаемся установить режим _MRES4COLOR else if(_setvideomode(_MRES4COLOR)) _outtext("установлен режим _MRES4COLOR"); else _outtext("Адаптер не поддерживает режимы\n" "_MRES16COLOR and _MRES4COLOR mode."); getch(); // восстанавливаем режим, используемый адаптером по умолчанию _setvideomode( _DEFAULTMODE ); } |