Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METOD_UKAZ.doc
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
2 Мб
Скачать
☆

2.3. Функции консольного ввода-вывода

Функции консольного ввода-вывода С++ помещены в файле <conio.h>, предназначены для облегчения работы по созданию простейшего оконного интерфейса. Эти функции используют понятие активного окна экрана. Активное окно это прямоугольная область экрана, в границах которой в данный момент работают функции. Описание активного окна (или, как часто говорят, фрейм) хранится во внутренней структурной переменной С++. Установку параметров активного текстового окна выполняет функция

window(int , int ,int , int );.

Она описывает активное текстовое окно: первая пара аргументов задает соответственно номера стол­бца и строки левого верхнего угла, вторая пара - правого нижнего угла. Строки и столбцы нумеруются, начиная от 1. Поэтому, например, координаты левого верхнего и правого нижнего углов экрана в режимах "25 строк х 80 столбцов" задаются парами (1,1) и (80,25). Расположение осей X и Y на экране показано на рис. 2.1.

Фрейм окна С++ имеет следующую структуру:

struct text_info

{unsigned char

winright, winbottom; /* столбец, строка правого нижнего угла */

attribute, normattr; /* атрибуты окна*/

currmode; /* текущий режим работы видеоадаптера */

screenheight; /* полная высота экрана */

screenwidth; /* полная ширина экрана */

сurх, сurу; }; /* строка, столбец текущей позиции курсора */

Информация об активном окне доступна при выполнении функции gettextinfo( struct text_info *t);

При вызове эта функция заполняет поля структурной переменной описанной по шаблону text_info, указатель t на которую она получает.

Функция window() инициализирует поля координат фрей­ма окна. Функции textcolor(), textbackground(), textattr() и другие управляют цветом отображаемых символов в окне. Они будут рассмотрены далее.

2.4. Управление курсором

Видеоадаптеры всех типов аппаратно поддерживают курсор, который в текстовых режимах отображается на экране в виде одной или нескольких линий в пределах тексела. Курсор указывает на текущую позицию экрана (строку и столбец тексела), в которую будет записываться или из которой будет читаться средства­ми BIOS символ. При переключении адаптера в графический режим курсор становится невидимым, но BIOS сохраняет воз­можность изменять его позицию. Специальные регистры видеоконтроллера хранят текущую позицию и форму курсора.

Программное прерывание 10h BIOS имеет в своем составе специальные функции для установки формы курсора, чтения и установки его координат.

Функция АН = 0lh задает высоту курсора. Регистр СН определяет номер верхней телевизионной линии, a CL - но­мер нижней линии при изображении курсора. Например, за­дав значения СН = 0, CL = 13, получим курсор, занимающий все знакоместо. Значения СН = 6, CL = 7 устанавливают форму кур­сора по умолчанию - две равномерно мерцающие строки в нижней части тексела. Если СН > CL, курсор будет состоять из двух групп линий вверху и внизу знакоместа с разрывом посередине. BIOS поддерживает оди­наковую форму курсора для всех видеостраниц текста. Биты 5 и 6 кода СН управляют мерцанием и могут выключить ото­бражение курсора (табл. 2.2).

Табл. 2.2. Биты управления отображением курсора

Биты регистра СН

Действие, оказываемое на курсор

бит 6

бит 5

0

0

Видимый, мерцающий равномерно с нормальной ско­ростью курсор

0

1

Курсор не отображается

1

0

Видимый, мерцающий равномерно с повышенной ско­ростью курсор

1

1

Видимый, неравномерно мерцающий курсор

BIOS записывает текущую форму курсора в слово по адресу 0040:0060h, при этом младший байт содержит номер нижней строки, а старший - номер верхней стро­ки для отображения курсора.

Управление формой курсора находит ограниченное приме­нение в практике программирования. Однако изменением фор­мы курсора можно отображать различные режимы работы про­граммы, например режим "Вставка" или режим "Замена". Намного чаще приходится выключать курсор. Это необходимо, когда программа сама отображает курсор.

Среди функций консольного ввода-вывода С++ теку­щей позицией курсора в окне управляет функция gotoxy(int x, int y);.

Устанавливает курсор в заданную строку y и столбец x в текущем активном окне экрана. Верхний левый угол окна имеет координаты (1,1). При попытке по­зиционировать курсор за границы окна он останавливается на границе окна. Особенностью функции является то, что координаты задаются относи­тельно левого верхнего угла текущего окна.

Текущую позицию x и y курсора в активном текстовом окне можно узнать при вызове соответственно функций wherex () и wherey().

Эти функции соответственно возвращают номер столбца и номер строки текущей позиции курсора. Кроме того, текущая позиция курсора в окне возвращается в полях curx и сurу структурной переменной, заполняемой при вызове функции gettextinfo( ) .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]