КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Многократный вывод символов и атрибутов
В современных ОС имеются специальные функции для многократного вывода однотипной информации, иногда облегчающие программисту его работу. Рассмотрим вначале средства многократного вывода одного символа. В OS/2 содержатся две системных функции, выполняющих эту задачу. Одна из них позволяет задавать символ вместе с атрибутом для вывода и называется VioWrtNCell. Другая не содержит информации об атрибуте выводимого символа и называется VioWrtNChar. Для обеих, если при их выполнении достигается конец экрана, вывод прекращается. Функция VioWrtNCell имеет на языке Си прототип APIRET16 VioWrtNCell(BYTE *pCell, USHORT len, USHORT row, USHORT col, HVIO hvio), где row – номер строки, а col – номер колонки позиции экрана, с которой начинается вывод (в случае одного символа – куда осуществляется вывод); len – число повторений вывода символа (сколько раз подряд заданный символ будет выводиться на экран); pCell – адрес ячейки из двух байтов, задающий информацию о символе для вывода, причем младший байт должен содержат ASCII код символа, а старший байт – атрибуты вывода. Функция VioWrtNChar имеет на языке Си прототип APIRET16 VioWrtNChar(BYTE *pChar, USHORT len, USHORT row, USHORT col, HVIO hvio), где row – номер строки, а col – номер колонки позиции экрана, с которой начинается вывод (в случае одного символа – кѓда осуществляется вывод), |en – число повторений вывода символа (сколько раз подряд заданный символ будет выводитьсџ0на экран), pChar - адрес байта, хранящего символ. Дополнением к возможностям только что рассмотренных функций служит функция VioWrtNAttr. Она позволяет предварительно установить новые атрибуты для текста или изменить старые атрибуты уже выведенного текста для последовательных позиций экрана. Место экрана, начиная с которого следует изменить атрибуты, указывается в вызове функции VioWrtNAttr. Функция VioWrtNAttr имеет на языке Си прототип APIRET16 VioWrtNAttr(BYTE *pAttr, USHORT len, USHORT row, USHORT col, HVIO hvio), где row – номер строки, а col – номер колонки позиции экрана, с которой задаются (изменяются) атрибуты, len – число мест для символов, в которых изменяются атрибуты, pAtrr – адрес байта, хранящего атрибут. Для многократного вывода одного символа в Windows предназначена функция FillConsoleOutputCharacter, а для многократного вывода одного и того же атрибута – функция FillConsoleOutputAttribute. Эти функции имеют прототипы BOOL FillConsoleOutputCharacter(HANDLE hConsOut, CHAR character, WORD len, COORD pos, DWORD* actlen); BOOL FillConsoleOutputAttribute(HANDLE hConsOut, WORD attr, DWORD len, COORD pos, DWORD* actlen). Первые аргументы этих функций задают хэндл экрана консоли (более точно экранного буфера), вторые соответственно – выводимый символ или выводимый атрибут, параметр len задает число повторений вывода этого символа или атрибута, а параметр actlen – адрес для возврата числа действительно выполненного числа повторений. Это число может отличаться от заказанного в вызове системной функции, если в процессе вывода достигнут конец экрана. Параметр pos задает позицию экрана, начиная с которой эти функции выполняют свой вывод. Для задания атрибутов в Windows можно использовать предопределенные символические константы, которые заданы в заголовочном файле wincon.h. Эти константы имеют названия FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, BACKGROUND_INTENSITY, которые говорят сами за себя. Для получения комбинированного цвета с их помощью достаточно несколько требуемых из них соединить символами побитовой операции ИЛИ. Так, например, для задания белового цвета символа следует указать операнд в виде FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE. (Нетрудно видеть, что этот подход достаточно громоздкий для нормального программиста, поэтому неплохо представлять, что значения перечисленных выше констант есть соответственно 1, 2, 4, 8, 16, 32, 64 и 128.) В Windows имеется еще одна возможность установки цвета для вывода на экран консоли. Ее предоставляет функция с прототипом BOOL SetConsoleTextAttribute(HANDLE houtput, WORD attrib). Эта функция устанавливает цвет, автоматически используемый далее при выводе на экран функцией WriteFile (и также более специализированной функцией WriteConsole), а так жеиспользуемый при отображении символов в процессе ввода функцией ReadFile. Кроме того, такая установка оказывается действующей и на те функции, которые в действительности построены на основе указанных. В то же время эта установка не действует на некоторые другие функции вывода, которые будут рассматриваться далее. (В частности на вывод в произвольную позицию экрана с помощью функции WriteConsoleOutput.) В операционной системе Unix отсутствуют системные функции многократного вывода символов и атрибутов. Желающие, впрочем, легко могут написать их для себя, опираясь на стандартные средства этой операционной системы. Для современного программирования непременной особенностью является широкое использование цветовых возможностей мониторов. Достаточно скромные средства для этого в Unix связана с тем, что эта ОС становилась и внутренне развивалась в более ранний период, когда наличие цветного монитора было редкой особенностью. Проблема использования цвета в Unix была решена с помощью управляющих последовательностей. Для задания цвета используются управляющие последовательности, последним символом которых служит латинская буква m. Сама управляющая последовательность имеет вид esc[ цвет m где компонент цвет задается десятичным числом согласно табл. 4.1.
Табл. 4.1.Кодирование цвета в управляющих последовательностях
Цвет символа, фона и, может быть, повышенной яркости можно задавать в одной управляющей последовательности, разделяя их символами "точка с запятой" и обязательно без дополнительных разделяющих пробелов. Например задание ярко-желтого символа на синем фоне, можно получить управляющей последовательностью esc[1;33;44m Цвет, установленный управляющей последовательностью, действует до тех пор, пока другой подобной последовательностью он не будет переустановлен. В частности, после завершения работы программы очень удобно вернуться к стандартному цвету использования консоли: светло-серым символам на черном фоне. Для такого перехода проще всего выполнить управляющую последовательность esc[0 m. Заметим, что параметры 30-47 соответствуют стандарту 6429 Международной организации по стандартизации (ISO). Нетрудно видеть, что средства Unix обеспечивают достаточно компактные средства управления цветом, но, к сожалению, для начинающих очень не наглядные.
Дата добавления: 2014-01-05; Просмотров: 711; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |