46019 (665326), страница 33

Файл №665326 46019 (Turbo C++ Programer`s guide) 33 страница46019 (665326) страница 332016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 33)

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

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

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

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

Числовые и символические значения, определенные в 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 и

Характеристики

Тип файла
Документ
Размер
2,71 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6518
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее