ЗНАЕТЕ ЛИ ВЫ?

Вывод информации в окно экрана



С++ включает большой набор функций ввода-вывода информации в окно экрана. Прототипы этих функций помещены в заголовочном файле <conio.h>. В отличие от функций стандартного ввода-вывода они позволяют управлять цветом выводимых символов и не пересекают пределы активного в данный момент окна. При достижении правой вертикальной границы курсор автоматически переходит на начало следующей строки в пределах окна, а при достижении нижней горизонтальной границы выполняется скроллинг окна вверх.

Функция clreol() стирает в текстовом окне строку, на которую установлен курсор, начиная с текущей позиции курсора и до конца строки (до правой вертикальной границы окна).

Функция clrscr() очищает все текстовое окно. Цвет "заливки" окна при очистке будет соответствовать значению, установленному символической переменной attribute в описании окна (структурная переменная по шаблону text_info). Функции управления цветом фона и символа описаны далее.

Функция delline() стирает в текстовом окне всю строку текста, на которую установлен курсор.

Функция insline() вставляет пустую строку в текущей позиции курсора со сдвигом всех остальных строк окна на одну строку вниз. При этом самая нижняя строка текста окна теряется.

Функция cprintf( const char *format,...) выполняет вывод информации с преобразованием по заданной форматной строке, на которую указывает format. Является аналогом функции стандартной библиотеки printf (), но выполняет вывод в пределах заданного окна. В отличие от printf () функция cprintf () иначе реагирует на специальный символ '\n': курсор переводится на новую строку, но не возвращается к левой границе окна. Поэтому для перевода курсора на начало новой строки текстового окна следует вывести последовательность символов CR-LF (0x0d, 0x0a). Остальные специальные символы воздействуют на курсор так же, как и в случае функций стандартного ввода-вывода. Функция возвращает число выведенных байтов, а не число обработанных полей, как это делает функция printf () .

Функция cputs( char *str) выводит строку символов в текстовое окно, начиная с текущей позиции курсора. На начало выводимой ASCII-строки указывает указатель str. Является аналогом функции стандартной библиотеки puts (), но выполняет вывод в пределах заданного окна и при выводе не добавляет специальный символ '\n'. Реакция cputs() на специальный символ '\n' аналогична реакции cprintf(). Функция возвращает ASCII-код последнего выведенного на экран символа. В отличие от puts() в функции отсутствует возврат символа EOF. Другими словами, вывод происходит на экран в любом случае.

Функция movetext(int left, int top, int right, int bottom,int destleft, int desttop) переносит окно, заданное координатами левого верхнего (left, top) и правого нижнего (right, bottom) углов, в другое место на экране, заданное координатами левого верхнего угла нового положения окна. Размеры окна по горизонтали и вертикали сохраняются. Все координаты задаются относительно координат верхнего левого угла экрана (1,1). Функция возвращает ненулевое значение, если перенос заданного окна выполнен. В противном случае возвращается 0. Функция корректно выполняет перекрывающиеся переносы, т.е. переносы, в которых прямоугольная область-источник и область, в которую окно переносится, частично покрывают друг друга.

Функция putch(int ch) выводит символ в текущей позиции текстового окна экрана. Как и для функций cprintf(), cputs(), специальный символ ‘\n' вызывает только переход курсора на следующую строку текстового окна без возврата к его левой вертикальной границе. Остальные специальные символы воздействуют на курсор так же, как и для функций стандартного ввода-вывода. \

Функция puttext(int left, int top, int right, int bottom,void *source) выводит на экран текстовое окно, заданное координатами левого верхнего (left, top) и правого нижнего (right, bottom) углов. Символы и атрибуты располагаются в буфере, адрес начала которого задает указатель source. Другими словами, функция "открывает" (восстанавливает) текстовое окно экрана. Обычно используется вместе с функцией gettext(), выполняющей обратную операцию - запись в буфер source символов/атрибутов, полностью описывающих все знакоместа текстового окна. Функция проверяет по заданным координатам окна, можно ли построить окно на экране для текущего режима видеоадаптера и корректны ли эти координаты. В случае, когда окно успешно выведено, возвращается ненулевое значение.

Функции highvideo (void), lowvideo (void) и normvideo (void) задают соответственно использование повышенной, пониженной и нормальной яркости для последующего вывода символов на экран.

Описываемые далее функции управляют атрибутом символа. Как отмечено ранее, атрибут задает битами 0-2 код цвета символа, бит 3 определяет повышение яркости, биты 4-6 задают код цвета фона символа, бит 7 определяет наличие или отсутствие мерцания символа. Возможно задать атрибут полностью либо задать только цвет символа или фона. Цвета могут задаваться либо числом, либо с использованием символических констант, значения которых определяет перечислимый тип COLORS (табл. 2.3):

Табл. 2.3.

 

Enum COLORS { /* Цвета нормальной яркости: */
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 */}

 

Яркие цвета могут задаваться только цвету символа. Кроме того, 7-й бит (бит мерцания) может быть задан как непосредственно в коде байта атрибута, так и с использованием символической константы BLINK, определяемой как код 128. Следует отметить тот факт, что если для цвета фона выбираются цвета с кодами 8-15, это устанавливает в единицу бит мерцания символа в байте атрибута.

Функция textattr(int newattr) устанавливает атрибут для функций, работающих с текстовыми окнами. Атрибут хранится в поле attribute структурной переменной по шаблону text_info, доступной через функцию gettextinfo(). Задаваемый атрибут может быть или числом, например 0x70 - атрибут инверсного изображения (черные символы на светло-сером фоне) или формироваться из символических констант, значения которых задает тип COLORS. Например, для задания мерцающих ярко-красных символов на сером фоне атрибут можно сформировать следующим образом:

BLINK | (BLACK << 4) | LIGHTRED

Тот же результат может быть получен и так:

(DARKGRAY << 4)| LIGHTRED

Функция textcolor(int newcolor) задает цвет символов, не затрагивая установленный цвет фона. Цвет может быть или числом, или формироваться из символических констант, значения которых определяет перечислимый тип COLORS.

Функция textbackground(int newcolor) задает цвет фона символов, не затрагивая установленный цвет символа. Цвет может быть или числом, или формироваться из символических констант, значения которых определяет перечислимый тип COLORS. Для цвета фона выбор ограничен значениями цветов 0-7. Если для цвета фона выбирается значение 8 - 15, то символы будут мерцать, так как бит мерцания установится в единицу, но цвет фона будет соответствовать значениям 0-7.

2.8. Предварительная подготовка к работе

Ознакомиться с организацией и функциональными возможностями различных типов видеосистем.

Ознакомиться с текстовым режимом отображения информации на экран монитора и стандартными библиотечными функциями C++, обслуживающими этот режим.

Порядок выполнения работы

Изменить программу, полученную на предыдущей работе таким образом, чтобы в окно с координатами (x1,у1,х2,у2) с шагами Т (секунд) и S (строк) выводилась надпись при всех возможных комбинациях цвета фона и цвета символов. Для каждой комбинации цветов в окне должны выводиться номера или символьные обозначения цветов фона и символов (варианты приведены в табл. 2.4).

Табл. 2.4. Варианты заданий

Номер варианта     Координаты окна   Обозначение цвета Шаг Направ­ление    
Xl Y1 X2 Y2 Фона Символа T S
Номер Англ 0.3 Вверх
Номер Русск 0.4 Вниз
Номер Номер 0.5 Вверх
Англ. Англ. 0.6 Вниз
Англ. Русск 0.7 Вверх
Англ. Номер 0.8 Вниз
Русск. Англ. 0.9 Вверх
Русск. Русск. 1.2 Вниз
Русск. Номер 1.3 Вверх
Номер Англ. 1.4 Вниз
Номер Русск. 1.5 Вверх
Номер Номер 0.2 Вниз
Англ. Англ. 0.3 Вверх
Англ. Русск. 0.4 Вниз
Англ. Номер 0.5 Вверх
Русск. Англ. 0.6 Вниз
Русск. Русск. 0.7 Вверх
Русск. Номер 0.8 Вниз
Номер Англ. 0.9 Вверх
Номер Русск. 1.1 Вниз

2. Организовать в окне вывод разноцветных сообщений со скроллингом окна.

3. Отлаженные программы предъявить преподавателю.

Содержание отчета

1. Краткие сведения о видеосистемах ПЭВМ, текстовом режиме их работы и функциях обслуживания текстового режима.

2. Алгоритмы и тексты отлаженных программ.

2.11. Контрольные вопросы

1. Что входит в понятие "видеосистема"?

2. Какие типы видеосистем вы знаете?

3. Назовите основные характеристики видеосистем?

4. Как влияет размер видеопамяти на характеристики системы?

5. Зачем нужен видеоадаптер?

6. Почему различают текстовый и графический режимы работы видеосистемы?

7. Назовите основные характеристики текстового режима, чем они обусловлены?

8. Что называется окном? Зачем нужны окна?

9. Можно ли на одном экране организовать несколько окон?

10. Какие функции инициализации текстового режима вы знаете?

11. Какие функции обслуживания окон вы знаете?

12. Что такое курсор и как можно им управлять?

13. Зачем нужен байт атрибутов символа?

14. Сколько цветов фона и символов можно одновременно использовать и почему?

15. Какая структура данных используется для хранения цветов?

 

 

Лабораторная работа № 3.





Последнее изменение этой страницы: 2016-06-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.156.32 (0.01 с.)