Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сабуров С.В. - Язык программирования C и C++ - 2006

.pdf
Скачиваний:
312
Добавлен:
13.08.2013
Размер:
1.42 Mб
Скачать

Справочник по работе с DOS

Размер палитры определяет диапазон значений, которые может принимать элемент изображения, от 0 до (размер 1). Функция getmaxcolor возвращает максимальное допустимое значение элемента изображения (размер 1) для текущего графического драйвера и режима.

При обсуждении графических функций Borland C++ мы часто используем термин «цвет», например текущий цвет вычерчивания, цвет заполнения и цвет элемента изображения. Фактически цветом мы здесь называем значение элемента изображения: это некоторый индекс в палитре. Только палитра реально определяет фактический цвет на экране. Манипулируя палитрой, вы можете изменять фактические цвета, выводимые на дисплей, даже хотя значения элементов изображения (цвета вычерчивания, заполнения и т.д.) могут не изменяться.

Цвет фона и вычерчивания

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

Цветом вычерчивания (цветом переднего плана) называется значение, в которое устанавливаются элементы изображения при вычерчивании линий. Цвет вычерчивания устанавливается функцией setcolor(n), где n есть допустимое для текущей палитры значение элемента изображения

Управление цветом на CGA

Из за различий в графическом аппаратном обеспечении фактическое управление цветами различно для CGA и EGA, что заставляет нас рассмотреть их по отдельности. Управление цветом для драйвера AT&T, а также режимы низкой разрешающей способности драйвера MCGA аналогичны управлению цветом CGA.

В случае адаптера CGA вы можете выбрать либо режим низкой разрешающей способности (320х200), который допускает использование четырех цветов, либо режим высокой разрешающей способностей (640х200), где допускается использование двух цветов.

227

Справочник по работе с DOS

CGA в режиме низкой разрешающей способности

В режиме низкой разрешающей способности вы имеете возможность выбрать одну из четырех четырехцветных палитр. В каждой из этих четырех палитр вы можете сами установить только первый (цвет 0) элемент; цвета 1, 2 и 3 являются фиксированными. Первый элемент палитры (цвет 0) — это цвет фона. Этот цвет может являться одним из 16 имеющихся цветов (см. таблицу цветов фона, приводимую ниже).

Вы выбираете желаемую палитру, выбирая соответствующий режим (CGAC0, CGAC1, CGAC2, CGAC3); эти режимы используют палитры цветов от 0 до 3, соответственно, как показано в следующей таблице. Цвета вычерчивания в CGA и эквивалентные им константы определяются в graphics.h.

Константа, присвоенная номеру цвета (значению эл. изображения)

Номер палитры

1

2

3

0

CGA_LIGHTGREEN

CGA_LIGHTRED

CGA_YELLOW

1

CGA_LIGHTCYAN

CGA_LIGHTMAGENTA

CGA_WHITE

2

CGA_GREEN

CGA_RED

CGA_BROWN

3

CGA_CYAN

CGA_MAGENTA

CGA_LIGHTGRAY

Для того, чтобы назначить один из этих цветов цветом вычерчивания CGA, нужно вызвать функцию setcolor, задав в ней в качестве аргумента либо номер цвета, либо имя соответствующей константы; например, если вы используете палитру 3 и желаете назначить цветом вычерчивания cyan, то можно записать:

setcolor(1);

или

setcolor(CGA_CYAN);

В следующей таблице перечислены назначаемые для CGA цвета фона:

Числовое значение

Символическое имя

0

BLACK

8

DARKGRAY

1

BLUE

9

LIGHTBLUE

2

GREEN

228

 

Справочник по работе с DOS

 

 

10

LIGHTGREEN

3

CYAN

11

LIGTHCYAN

4

RED

12

LIGHTRED

5

MAGENTA

13

LIGHTMAGENTA

6

BROWN

14

YELLOW

7

LIGHTGRAY

15

WHITE

Цвета CGA для переднего плана те же, что находятся в данной таблице. Для назначения одного из этих цветов в качестве фонового цвета служит функция setbkcolor(цвет), где цвет — это один из элементов приведенной выше таблицы. Отметим, что для CGA цвет не является значением элемента изображения (индексом в палитре). Он прямо задает фактический цвет, помещаемый в первый элемент палитры.

CGA в режиме высокой разрешающей способности

В режиме высокой разрешающей способности (640x200) CGA работает с двумя цветами — черным цветом фона и цветным передним планом. Элементы изображения могут принимать при этом значения только 0 или 1. В связи с особенностями CGA цветом переднего плана фактически является тот цвет, который аппаратное обеспечение считает цветом фона. Таким образом, цвет переднего плана устанавливается подпрограммой setbkcolor.

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

Режимы CGAHI, MCGAMED, MCGAHI, ATT400MED и ATT400HI работают аналогичным образом.

229

Справочник по работе с DOS

Подпрограммы управления палитрой в случае CGA

Поскольку палитра CGA является предопределенной, подпрограмму setallpalette использовать в данном случае нельзя. Также не следует использовать setpalette(индекс, фактический_цвет), за исключением индекс=0. (Это альтернативный способ установки фонового цвета CGA равным фактическому цвету)

Управление цветом для EGA и VGA

В случае EGA палитра содержит 16 элементов из общего количества 64 возможных цветов, причем каждый из элементов палитры может быть задан пользователем. Доступ к текущей палитре выполняется через функцию getpalette, которая заполняет структуру, включающую в себя размер палитры (16) и массив фактических элементов палитры («аппаратные номера цветов», хранимые в палитре). Элементы палитры можно изменять как по отдельности при помощи setpalette, либо все сразу через функцию setallpalette.

Палитра EGA по умолчанию соответствует 16 цветам CGA, которые были даны в предыдущей таблице цветов: черный равен элементу 0, голубой равен элементу 1, ... , белый равен элементу 15. В graphics.h определены константы, которые содержат соответствующие цветам аппаратные значения: это EGA_BLACK, EGA_WHITE и т.д. Эти значения могут быть также получены через функцию getpalette.

Подпрограмма setbkcolor(цвет) на EGA работает несколько иначе, чем на CGA. На EGA setbkcolor копирует фактическое значение цвета, хранящееся в элементе #цвет, в элемент #0.

Что касается цветов, то драйвер VGA работает фактически так же, как и драйвер EGA; он просто имеет более высокое разрешение (и меньшие по размеру элементы изображения)

Обработка ошибок в графическом режиме

Ниже приведены функции обработки ошибок в графическом режиме:

grapherrormsg

Возвращает строку с сообщением об ошибке для заданного кода ошибки.

230

Справочник по работе с DOS

graphresult

Возвращает код ошибки для последней графической операции, в которой встретилась ошибка.

Если ошибка произошла при вызове графической библиотечной функции (например, не найден шрифт, запрошенный функцией settextstyle), устанавливается внутренний код ошибки. Доступ к коду ошибки для последней графической операции, сообщившей об ошибке, выполняется при помощи функции graphresult. Вызов grapherrormsg(graphresult()) возвращает строку сообщения об ошибке из приведенных выше.

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

Код ошибки, константа графической ошибки и соответствующая строка с сообщением об ошибке приведены ниже:

0 grOk

No error (нет ошибки)

!1 grNoInitGraph

(BGI) graphics not installed (use initgraph) (графика не инсталлирована используйте функцию initgraph)

!2 grNotDetected

Graphics hardware not detecte (графическое аппаратное обеспечение не обнаружено)

!3 grFileNotFound

Device driver file not found (не найден файл драйвера устройства)

!4 grInvalidDriver

Invalid device driver file (неверный файл драйвера устройства)

231

Справочник по работе с DOS

!5 grNoLoadMem

Not enough memory to load driver (не хватает памяти для загрузки драйвера)

!6 grNoScanMem

Out of memory in scan fill (кончилась память при сканирующем заполнении)

!7 grNofloodMem

Out of memory in flood fill (кончилась память при лавинном заполнении)

!8 grFontNotFound

Font file not found (файл шрифта не найден)

!9 grNoFontMem

Not enough memory to load font (не хватает памяти для загрузки шрифта)

!10 grInvalidMode

Invalid graphics mode for selected driver (недопустимый графический режим для выбранного драйвера)

!11 grError

Graphics error (графическая ошибка)

!12 grIOerror

Graphics I/O error (графическая ошибка ввода вывода)

!13 grInvalidFont

Invalid font file (неверный файл шрифта)

!14 grInvalidFontNum

Invalid font number (неверный номер шрифта)

!15 grInvalidDeviceNum

Invalid device number (неверный номер устройства)

232

Справочник по работе с DOS

!18 grInvalidVersion

Invalid version of file (неправильная версия файла)

Функции запроса состояния

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

Функции запроса состояния графического режима

getarccoords

Возвращает информацию о координатах, заданных в последнем вызове arc или ellipse.

getaspectratio

Возвращает коэффициент сжатия для графического экрана.

getbkcolor

Возвращает текущий цвет фона.

getcolor

Возвращает текущий цвет вычерчивания.

getdrivername

Возвращает имя текущего графического драйвера.

getfillpattern

Возвращает шаблон заполнения, определяемый пользователем.

getfillsettings

Возвращает информацию о текущем шаблоне и цвете заполнения.

getgraphmode

Возвращает текущий графический режим.

getlinesettings

Возвращает текущие стиль, шаблон и толщину линии.

getmaxcolor

Возвращает максимально допустимое на текущий момент значение элемента изображения.

getmaxmode

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

233

Справочник по работе с DOS

getmaxx

Возвращает текущее разрешение по оси x.

getmaxy

Возвращает текущее разрешение по оси y.

getmodename

Возвращает имя данного режима драйвера.

getmoderange

Возвращает диапазон режимов для данного драйвера.

getpalette

Возвращает текущую палитру и ее размер.

getpixel

Возвращает цвет элемента изображения в (x,y).

gettextsettings

Возвращает текущий шрифт, направление, размер и способ выравнивания текста.

getviewsettings

Возвращает информацию о текущем графическом окне.

getx

Возвращает координату x текущей позиции (CP).

gety

Возвращает координату y текущей позиции (CP).

В каждой из категорий графических функций Borland C++ имеется хотя бы одна функция запроса состояния. Каждая из графических функций запроса состояния Borland C++ имеет имя вида «get что то» (за исключением категории функций обработки ошибок). Некоторые из них не воспринимают никаких аргументов и возвращают единственное значение, представляющее собой искомую информацию. Прочие считывают указатель структуры, определяемой в файле graphics.h, заполняют эту структуру соответствующей информацией и не возвращают никаких значений.

Функциями запроса состояния категории управления графической системы являются getgraphmode, getmaxmode и getmoderange. Первая из них возвращает целое число, определяющее текущий графический драйвер и режим, вторая

234

Справочник по работе с DOS

возвращает максимальный номер режима для этого драйвера, а третья возвращает диапазон режимов, поддерживаемых данным графическим драйвером. getmaxx и getmaxy возвращают соответственно максимальные экранные координаты x и y для текущего графического режима.

Функциями запроса состояния категории вычерчивания и заполнения являются функции getarccoords, getaspectratio, getfillpattern и getlinesettings. Функция getarccoords заполняет структуру, содержащую координаты, которые использовались при последнем вызове функций arc или ellipse. Функция getaspectratio сообщает текущий коэффициент сжатия, используемый графической системой для того, чтобы окружности выглядели круглыми. Функция getfillpattern возвращает текущий определяемый пользователем шаблон заполнения. Функция getfillsettings заполняет некоторую структуру текущим шаблоном и цветом заполнения. Функция getlinesettings заполняет структуру текущим стилем линии (сплошная, пунктир и т.д.), толщиной (обычная или увеличенная), а также шаблоном линии.

Функциями запроса состояния категории манипулирования графическим окном являются getviewsettings, getx, gety и getpixel. После того, как графическое окно определено, вы можете найти его абсолютные экранные координаты и выяснить состояние режима отсечения, вызвав getwiewsettings, которая заполняет соответствующей информацией некоторую структуру. Функции getx и gety возвращают (относительно графического окна) x и y координаты текущей позиции (CP). Функция getpixel возвращает цвет указанного элемента изображения.

Функция запроса состояния категории вывода текста в графическом режиме имеется только одна, и притом всеобъемлющая, — gettextsettings. Эта функция заполняет структуру информацией о текущем символьном шрифте, направлении вывода текста (по горизонтали или по вертикали), коэффициенте увеличения символов, а также виде выравнивания (как для горизонтально, так и для вертикально ориентированных текстов).

Функциями запроса состоянии категории управления цветом Borland С++ являются функция getbkcolor, возвращающая текущий цвет фона, функция getcolor, возвращающая текущий цвет вычерчивания и функция getpalette, заполняющая структуру,

235

Справочник по работе с DOS

которая включает в себя размер текущей палитры и ее содержимое. Функция getmaxcolor возвращает максимально допустимое значение элемента изображения для текущего графического драйвера и режима (размер палитры 1).

И наконец, функции getmodename и getdrivername

возвращают имя заданного режима драйвера и имя текущего графического драйвера, соответственно.

Библиотеки DOS

Ниже представлен краткий обзор библиотечных программ Borland С++, доступных только для 16 разрядных приложений DOS. Библиотечные подпрограммы состоят из функций и макрокоманд, которые можно вызывать в программах Си и С++ для выполнения различных задач, включая ввод вывод различного уровня, работу со строками и файлами, распределение памяти, управление процессом, преобразование данных, математические вычисления и др.

Библиотеки исполняющей системы

В приложениях DOS используются статические библиотеки исполняющей системы (OBJ и LIB).

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

Библиотеки поддержки DOS

Статические (OBJ и LIB) 16 разрядные библиотеки исполняющей системы Borland С++ после установки записываются в подкаталог LIB. Для каждого из имен этих библиотек символ «?» представляет одну и 6 поддерживаемых Borland моделей памяти. Каждая модель имеет собственный библиотечный файл и файл поддержки математических операций с версиями подпрограмм, написанных для конкретной модели.

236

Соседние файлы в предмете Программирование на C++