![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Void window(int l_t_col, int l_t_row,int r_b_col, int r_b_row)
Описывает активное текстовое окно: первая пара аргументов задает столбец и строку левого верхнего угла, вторая пара - правого нижнего угла. Строки и столбцы нумеруются, начиная от 1. Поэтому, например, координаты левого верхнего и правого нижнего углов экрана в режимах "25 строк х 80 столбцов" задаются парами (1,1) и (80,25). Обратите внимание на то, как в Turbo С задаются координаты углов: сначала столбец, затем строка. Другими словами, оси X и Y накладываются на экран так, как это показано на рис. 1.1.
Фрейм окна Turbo С имеет следующую структуру: Struct text_ jnfo {unsigned char wlnleft, wintop; /* столбец, строка левого верхнего угла */ winright, winbottom; /* столбец, строка правого нижнего угла */ attribute, normattr; /* атрибуты окна*/ currmode; /* текущий режим работы видеоадаптера */ screenheight; /* полная высота экрана */ screenwidth; /* полная ширина экрана */ сиrх, сиrу; }; /* строка, столбец текущей позиции курсора */ Информация об активном окне доступна при выполнении функции gettextinfo ( ): #include <conio.h> void gettextinfo( struct text_info *r) Заполняет поля структурной переменной по шаблону text_info, на которую ссылается r. Шаблон структуры text_info, описывающей текущее окно экрана, содержится в заголовочном файле <conio.h>. Функция window() инициализирует поля координат фрейма окна. Функции textcolor(), textbackground(), textattr() и другие управляют цветом отображаемых символов окна. Они рассмотрены далее.
Управление курсором Видеоадаптеры всех типов аппаратно поддерживают курсор, который в текстовых режимах отображается на экране в виде одной или нескольких телевизионных линий в пределах тексела. Курсор отображает текущую позицию экрана (строку и столбец тексела), по которой будет записываться или читаться средствами BIOS символ. При переключении адаптера в графический режим курсор становится невидимым, но BIOS сохраняет возможность изменять его позицию. Специальные регистры CRT-контроллера хранят текущую позицию и форму курсора. Прерывание 10h BIOS имеет в своем составе специальные функции для установки формы курсора, чтения и установки его координат. Функция АН = 0lh задает "толщину" курсора. Регистр СН определяет номер верхней телевизионной линии, a CL - номер нижней линии при изображении курсора. Например, задав для монохроматического адаптера значения СН = 0, CL = 13, получим курсор, занимающий все знакоместо. Значения СН = 6, CL = 7 для CGA-адаптера устанавливают форму курсора по умолчанию - две равномерно мерцающие телевизионные строки в самом низу тексела. Если СН > CL, курсор будет состоять из двух групп телевизионных линий вверху и внизу знакоместа с разрывом посередине. BIOS поддерживает одинаковую форму курсора для всех видеостраниц текста. Биты 5 и 6 кода СН управляют мерцанием и могут выключить отображение курсора (табл. 1.2). Табл. 1.2. Биты управления отображением курсора
BIOS записывает текущую форму курсора в слово по адресу0040:0060h; младший байт содержит номер нижней телевизионной строки, старший - номер верхней телевизионной строки для отображения курсора. Управление формой курсора находит ограниченное применение в практике программирования. Однако изменением формы курсора можно отображать различные режимы работы программы, например режим "Вставка" или режим "Переопределение текста", выполненную фиксацию верхнего регистра клавиатуры и т.п. Намного чаще приходится выключать курсор. Это необходимо, когда программа сама отображает курсор. Для алфавитно-цифровых режимов наиболее удобной собственной формой курсора является знакоместо с другим атрибутом символа. Изменяя цвет, задаваемый атрибутом, программа сообщает об изменении режима работы. Среди функций консольного ввода-вывода Turbo С текущей позицией курсора в окне управляет функция gotoxy( ).
#include <conio.h> Void gotoxy(intx, inty) Устанавливает курсор в строку у и столбец х в текущем активном окне экрана. Верхний левый угол окна имеет координаты (1,1). При попытке позиционировать курсор за границы окна он останавливается на границе окна. Особенностью функции является то, что координаты х и у являются относительными, приведенными к левому верхнему углу. Например, если текущее окно было описано функцией window(1,8,80,25);, обращение gotoxy(5,5); установит курсор в пятый относительный столбец окна (совпадает с абсолютным столбцом 4, отсчитываемым от 0) в пятой относительной строке (так как верхняя строка окна задана равной 5, то абсолютная строка будет равна 5 + 5 - 1, если отсчет строк идет от 0). Текущую позицию курсора в активном текстовом окне сообщают функции wherex () и wherey(). #include <conio.h> Int wherex(void) Int wherey(void) Сообщают столбец и строку текущей позиции курсора; возвращают целое число в диапазоне соответственно от 1 до 80 и от 1 до 25. Кроме того, текущая позиция курсора в окне возвращается в полях curx и сиrу структурной переменной по шаблону text_info, заполняемой при выполнении функции gettextinfo( ) .
![]() |