рефераты

рефераты

 
 
рефераты рефераты

Меню

Реферат: Turbo C++ Programer`s guide рефераты

normvideo              Установка обычной яркости текста.

Функцииуправления аттрибутами устанавливают текущий аттрибут, представляющий собой 8-битовое значение. Четыре младших бита аттрибута задают цвет переднего плана, следующие три бита задают цвет фона, а старший бит задает "мигание" изображения, для которого установлен данный аттрибут.

Вывод всех последующих текстов выполняется с использованием текущего аттрибута. Благодаря функциям управления аттрибутами вы можете устанавливать цвета фона и переднего плана (символов)как порознь (textbackground и textcolor), так и объединяя спецификации этих цветов в одном обращении к textattr. Вы можете задавать также аттрибут мигания переднегоплана (т.е. собственно выводимых символов). Большинство цветных мониторов в цветных режимах дает истинные заданные цвета. Не-цветные мониторы могут преобразовывать некоторые изэтих аттрибутов или все аттрибуты в различные монохроматические оттенки или другие визуальные эффекты,как например, жирный шрифт, подчеркивание, инверсное изображение и т.д.

Вы можете также переопределить для переднего плана изображения яркость цветов вывода при помощи функции lowvideo (которая выключает бит повышенной яркости отображения символов). Либо наоборот, вы можете изменить яркость на повышенную при помощи функции highvideo (которая включает бит повышенной яркости). Когда выделение яркостьюбольшене требуется,можно восстановить исходную установку яркости при помощи функции normvideo.

Запрос состояния

Ниже кратко перечислены функции, при помощи которых ваша программа может сделать запрос состояния видео параметров:

gettextinfo  Заполняет структуру text_info информацией о

текущем текстовом окне.

wherex            Дает x-координату ячейки экрана, в которой в

текущий момент находится курсор.

wherey            Дает y-координату ячейки экрана, в которой в

текущий момент находится курсор.

Функции консольного ввода/вывода Turbo C++ включают в себя несколько специальных функций запроса состояния. При помощи этих функций вы можете получить достеп к информации о текущем текстовом режиме и текущей позиции курсора в этом окне.

Функция gettextinfoзаполняет структуру text_info (определенную в conio.h) подробными даннымио текстовом окне, включая:

- текущий видео режим

- позиция окна в абсолютных экранных координатах

- размеры окна

- текущие цвета переднего плана и фона

- текущая позиция курсора

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

Форма курсора

Для изменения способа представления курсора служит новая функция _setcursortype. Она принимает значения _NOCURSOR, которая вообще отменяет курсор, _SOLIDCURSOR, которая дает курсор в виде сплошного прямоугольничка и _NORMALCURSOR, которое соответствует обычному курсору в форме подчеркивания.

Текстовые окна

По умолчанию текстовое окно имеет размервсего экрана;это умолчание можно изменить, создав окно, по размеру меньше экрана, с помощью функции window. Текстовые окна могут содержать до 50 строк и от 40 до 80 столбцов.

Начало координат окна(точка, от которой отсчитываются координаты окна) в Turbo C++ лежит вверхнем девомуглу окна. Координаты верхнего левого угла окна равны (1,1); координаты правого нижнего окна полноэкранного окна равны при 80столбцах и 25 строках (80,25).

Пример

Предположим, у вас имеется 100%-совместимая с PC система, находящаяся в текстовом режиме с 80 столбцами, ивы желаете создать окно. Верхний левый угол окна должен иметь экранные координаты (10.8), а нижний правый - (50,21). Для этого требуется вызвать функцию window:

window(10, 8, 50, 21);

Теперь, создав текстовое окно, вы можете поместить курсор в позицию окна (5,8) и вывести, начиная с этойпозиции, некоторый текст с использованием gotoxy и cputs.

gotoxy(5, 8);

cputs("С днем рождения, Френк Борланд");

Следующий рисунок иллюстрирует сказанное.

Столбец 1 экрана

\!

Строка 1--xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx экрана   x   x

x   x

x   x

x   x

x   x

x   x

Строка 1--x --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x окна x x x x

x  x   x   x

x  x С днем рождения, Френк Борланд x   x

x  x   x   x

Строка 14-x---- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x окна x x

x  \!   \!   x

x  \!   \!   x

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-Строка \!   \!   \!  25

\!   \!   \! экрана

\!   \!   \!

Столбец 1 Столбец 41 Столбец 80 окна окна экрана

Рис.5.1 Окно в текстовом режиме 80x25 Тип text_mode

Вы можете перевести свой монитор в один из семи текстовых режимов PC, вызвав для этогофункцию textmode. Определяемый в conio.h перечислимый тип text_mode позволяет использовать в качестве аргумента режима, задаваемого при вызове text_mode, любое символическое имя, определенное для данного перечислимого типа, вместо "сырых" номеров режимов. Однако, чтобы воспользоваться данными симвоическими константами, следует ввести:

#include <conio.h>

в исходный код программы.

Числовые и символические значения, определенные в text_ mode, приводятся ниже:

-----------------------------------------------------------

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

константазначение  Текстовый видео режим

LASTMODE   -1  Предыдущий текстовый режим

BW40    0  Черно-белый,                40 столбцов

C40    1  16 цветов, 40                    столбцов

BW80    2  Черно-белый,                80 столбцов

C80    3  16 цветов, 80                    столбцов

MONO    7  Монохромный,           80 столбцов

C4350   64  EGA, 80x43;  VGA, 80x50 строк

Например, следующие вызовы textmode помещаютваш цветной монитор в указанный рабочий режим:

textmode(0)                     Черно-белый, 40 столбцов

textmode(BW80)             Черно-белый, 80 столбцов

textmode(c40)                 16 цветов, 40 столбцов

textmode(3)                     16 цветов, 80 столбцов

textmode(7)                     Монохромный, 80 столбцов

textmode(C4350)            EGA, 80x43;  VGA, 80x50 строк

После вызова textmode с режимомC4350 следуетпри помощи функции settextinfo задать число строк экрана.

Цвета текста

Подробную информацию о том, как хранятся аттрибуты ячеек, см. в описании textattr в Главе 1 Справочника по библиотеке.

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

Включаемый файл conio.h определяет вместо различных цветов символические имена. При использовании этих символических констант вы должны включить в исходный код conio.h.

В следующей таблице приводятся эти символические константы и соответствующие им числовые значения. Отметим, что только первые восемь цветов являются доступными и для переднего плана, и для фона; последние 8 цветов (номера 8 - 15) доступны исключительно для переднего плана (собственно символов).

-----------------------------------------------------------

Символическая                     Числовое   Передний план

константа                     значение   или фон?

BLACK  0  Оба

BLUE  1  Оба

GREEN  2  Оба

CYAN  3  Оба

RED  4  Оба

MAGENTA  5  Оба

BROWN  6  Оба

LIGHTGRAY  7  Оба

DARKGRAY  8  Только передний план

LIGHTBLUE  9  Только передний план

LIGHTGREEN 10  Только передний план

LIGHTCYAN 11  Только передний план

LIGHTRED 12  Только передний план

LIGHTMAGENTA 13  Только передний план

YELLOW  14  Только передний план

WHITE 15  Только передний план

BLINK128  Только передний план

Если выжелаете, чтобы символ мигал, добавьте к аргументу переднего плана символическую константу BLINK(числовое значение 128).

Высокоскоростной вывод: переменная directvideo

Пакет консольных функциий ввода/вывода Turbo C++ включает переменную directvideo. Эта переменная управляет тем,выполняется ли вывод на консоль из вашей программы непосредственно в оперативную память дисплея (directvideo =

1),  либо направлфется туда через вызовы BIOS (directvideo =

0).

По умолчанию значение directvideo = 1 (консольный вывод направляется непосредственно в память дисплея). В целом, работа непосредственно с дисплейной памятью ускоряет вывод, но для этого требуется 100% совместимость вашей машины с IBM PC.Ваша видео аппаратура должна быть идентичнадисплейным адаптерам IBM. Установка directvideo=0 позволит вам работать на любой машине с IBM-совместимым BIOS, но вывод на консоль будет несколько замедлен.

Программирование в графическом режиме

В данном режиме приводится краткое изложение функций, используемых в графическом режиме. Более подробная информация об этих функциях находится в Главе 1 Справочника по библиотеке.

Turbo C++ имеет отдельную библиотекус более чем 70 графическими функциями, начиная от функций высокого уровня (таких как setviewport, bar3d и drawpoly) и кончая бит-ориентированными функциями (ипа getimage иputimage). Графическая библиотека поддерживает многочисленные стили линий и заполнителей, а также предоставляютвам различныетекстовые шрифты, которые вы можете изменять по размерам, способу выравнивания, а также ориентировать их либо по горизонтали, либо по вертикали.

Эти функции             находятся              в          библиотечном                файле

GRAPHICS.LIB, а их прототипы - в файле заголовка graphics.h. Кроме этих двух файлов, в состав графического пакета входят драйверы графических устройств (файлы *.BGI) и символьные шрифты (*.CHR-файлы).;эти дополнительные файлы рассматриваются в следующих разделах.

Для использования графических функций:

- При работе в интегрированной среде переключите Full menus в состояние on и выберите Options \! Linker \! Graphics Library. При создании программы компоновщик автоматически выполнит компоновку графической библиотеки Turbo C++.

- Если вы используете TCC.EXE, вы должны в командной строке указать GRAPHICS.LIB. Например, если ваша программа, MYPROG.C, использует графику, то командная строка TCC должна иметь вид:

tcc myprog graphics.lib

Важное замечание !

Поскольку графические функциииспользуют указатели far, графика в случае модели рамяти tiny не поддерживается.

Графическая библиотека только одна и не имеет версий по моделям памяти (по сравнению со стандартными библиотеками CS.LIB, CC.LIB, CM.LIB и т.д., которые зависят от используемой модели памяти). Каждая функция в GRAPHICS.LIB является far (дальней) функцией, а графические функции, использующие указатели работают с дальними указателями. Для правильной работы графических функций требуется директива #include graphics.h вкаждом использующем graphics модуле.

Функции библиотеки graphics

Графические функции Turbo C++ делятся на несколько категорий:

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

- черчения и заполнения

- манипулирования экранами и графическими окнами

- вывода текстов

- управления цветами

- обработки ошибок

- запроса состояния

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

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

closegraph                   Закрывает графическую систему.

detectgraph  Проверяет аппаратное обеспечение и определяет,

какие графические драйверы использовать;

рекомендует предпочтительный режим.

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

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

_graphfreemem Отменяет распределенную графике память; используется для определения собственной подпро-

граммы.

_graphgetmem   Распределяет память графике; используется

для определения собственной подпрограммы.

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

getmoderange   Допускает младший и старший допустимые режимы

для заданного драйвера.

initgraph                   Инициализирует графическую систему и переводит

аппаратное обеспечение в графический режим.

installuserdriver  Инсталлирует дополнительный драйвер устрой

ства в таблицу драйверов устройста BGI.

installuserfont  Загружает поставляемый файл штрихового шриф

та в таблицу символьных файлов BGI.

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

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

во время компоновки.

restorecrtmode Восстанавливает  первоначальный (существовав

ший до Initgraph) режим экрана.

setgraphbufsize  Задает размер внутреннего графического буфе

ра.

setgraphmode   Выбирает заданный графический режим, очищает

зкран и восстанавливает все умолчания.

Графический пакет Turbo 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. В следующих параграфах initgraph, _graphgetmem и _graphfreemem будут описаны подробно.

Обычно подпрограмма initgraph загружает графический драйвер, распределяя для этого драйвера память и затем загружая туда с диска соответствующий файл .BGI. В качестве альтернативы данной схемединамической загрузкивы можете скомпоновать нужный файл графического драйвера (или несколько таких файлов) непосредственно с файлом выполняемой программы. Для этого .BGI-файл сначала преобразуетсяв .OBJ-файл (при помощи утилиты BGIOBJ -см. документацию в файле UTIL.DOC, который поставляется на одном из дистрибутивных дисков), после чего в исходный код помещается вызов registerbgidriver (до вызова initgraph), чтобы зарегистрировать графический драйвер(ы) в системе. При построении программы вы должны выполнить компоновку.OBJ-файлов всех зарегистрированных драйверов. После определения того, который графический драйвер должен быть использован (посредством detectgraph) initgraph проверяет, был ли желаемый драйвер зарегистрирован. Если был, то initgraph обращается к зарегистрированному драйверу непосредственно в памяти. В противном случае initgraph распределяет память для драйвера и зпгружает нужный .BGI-файл с диска.

Примечание

Использование функции registerbgidriverотносится к более сложным методам программирования, не рекомендуемым для начинающих программистов. Более подробно данная функция описанав Главе 1

Справочника по библиотеке.

Во время выполнения графической системе может понадобиться выполнить распределение памяти для драйверов, шрифтов и внутренних буферов. Принеобходимостиона вызывает _graphgetmemдля распределенияпамятии _graphfreemem для ее освобождения. По умолчанию данные подпрограммы просто вызывают malloc и free, соответственно.

Действиеэтих функций по умолчанию можно переопределить, определив собственные функции _graphgetmem и _graphfreemem. Благодаря этому вы можете сами управлять распределением памяти для графики. Однако, ваши варианты функций управления распределением памяти должны иметь те же имена: онизаменят собойфункции по умолчанию с теми же именами из стандартных библиотек С.

Определив собственные                  функции             _graphgetmem                 и

_graphfreemem,  вы можете получить предупреждение "duplicate

symbols" ("повторение символических имен"). Это предупреждение можно игнорировать.

Черчение и заполнение

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

Черчение:

arc               Чертит дугу окружности.

circle                Чертит окружность.

drawpoly              Чертит контур многоугольника.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40