Организация высокоуровневого консольного ввода-вывода




 

Для организации высокоуровневого ввода-вывода приложение может использовать функции консольного ввода-вывода ReadConsole и WriteConsole. Эти функции обеспечивают доступ к входному и экранным буферам консоли.

Для своей работы эти и некоторые другие консольные функции требуют получения стандартных дескрипторов ввода-вывода.

Дескриптор - это 32-разрядное число, которое уникально идентифицирует объект, представляющий собой входное или выходное устройство.

По умолчанию стандартный дескриптор ввода связан с клавиатурой, стандартный дескриптор вывода — с экраном.

 

ReadConsole

Получает входные символы из буфера ввода консоли и сохраняет их в указанном буфере (то есть в переменной).

Формат вызова функции:

invoke ReadConsole, hConsoleInput, lpBuffer, nNumberOfCharsToRead, lpNumberOfCharsRead, lpReserved

Здесь после названия функции ReadConsole з аписывают используемые этой функцией параметры:

hConsoleInput - дескриптор ввода консоли (идентифицирует клавиатуру);

lpBuffer - указатель на переменную, в которую будет записана вводимая строка символов;

nNumberOfCharsToRead - размер буфера, указанного в lpBuffer;

lpNumberOfCharsRead – указатель на переменную, которая будет содержать количество действительно введенных символов;

lpReserved - этот параметр не используется, поэтому должен задаваться как NULL.

При использовании данной и последующих функций под термином “указатель” на переменную будем иметь в виду смещение данной перемееной относительно начала сегмента данных, которое можно получить с помощью оператора OFFSET.

Например,

invoke ReadConsole,dIn,offset TitleText,80,offset NumWri,NULL

где в секции данных описаны следующие переменные:

dIn dd 0;дескриптор ввода консоли

NumWri dd 0;количество действительно введенных-выведенных символов

TitleText db 80 dup (0),0

WriteConsole

Извлекает символы из указанного буфера и записывает их в экранный буфер, начиная с текущей позиции курсора и продвигая ее по мере записи символов.

Формат вызова функции:

invoke WriteConsole, hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved

где:

hConsoIeOutput — дескриптор выходного потока консоли;

lpBuffer — указатель на переменную, содержащую выводимую строку;

nNumberOfCharsToWrite — размер выводимой строки (размер lpBuffer);

lpNumberOfCharsWritten — указатель на перменную, которая будет содержать количество действительно выведенных символов;

lpReserved — этот параметр не используется, поэтому должен задаваться как NULL.

 

При использовании функций ReadConsole и WriteConsole в качестве параметров hConsolelnput и hConsoleOutput должны использоваться стандартные дескрипторы ввода-вывода. Получить стандартные дескрипторы ввода-вывода можно с помощью функции GetStdHandle. Формат вызова этой функции:

iInvoke GetStdHandle,nStdHandle

На вход функции GetStdHandle должно быть подано одно из следующих значений:

-10 = STD_INPUT_HANDLE – для получения дескриптора стандартного входного потока;

-11 = STD_OUTPUT_HANDLE – для получения дескриптора стандартного выходного потока.

В качестве параметра можно указать конкретное число (-10 или –11), но обычно используют стандартные константы (STD_INPUT_HANDLE и STD_OUTPUT_HANDLE), которым присвены соответствующие значения и которые описаны в подключаемом файле WINDOWS.INC в следующем виде:

STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

 

Используя функции высокоуровневого ввода-вывода, приложение может управлять расположением, цветами текста и фона, которыми должны отображаться символы, записываемые в экранный буфер.

Рассмотрим применение некоторых из этих функций.

 

Функция SetConsoleCursorPosition предназначена для указания позиции, с которой начинается выполнение операций чтения-записи в окне консоли:

Формат вызова:

invoke SetConsoleCursorPosition, hConsoleOutput, dwCursorPosition

где:

hConsoIeOutput – дескриптор выходного потока консоли (предварительно полученный функцией GetStdHandle);

dwCursorPosition – 32-разрядная переменная, содержащая координаты, в которых будет установлен курсор консоли. Младшие 16 разрядов содержат координату X, а старшие 16 разрядов – координату Y. Для описания координат удобнее использовать струтуру.

 

По умолчанию цветовое оформление окна консоли довольно унылое — черный фон, белый текст. Внести разнообразие во внешний вид окна консоли поможет функция SetConsoleTextAttribute, с помощью которой можно изменить цвета, уста­новленные по умолчанию для текста и фона. Формат вызова:

invoke SetConsoleTextAttribute, hConsoleOutput, dwAttributes

где:

hConsoleOutput - дескриптор выходного потока консоли (предварительно полученный функцией GetStdHandle);

dwAttributes – 32-разрядное число, определяющее цвета для текста и фона.

Параметр dwAttributes определяет цвет текста и фона. Он формируется через операцию логического ИЛИ следующих значений:

FOREGROUND_BLUE = 000lh - синий текст;

FOREGROUND_GREEN = 0002h - зеленый текст;

FOREGROUND_RED = 0004h - красный текст;

FOREGROUNDJNTENSITY = 0008h - текст повышенной яркости;

BACKGROUND_BLUE = 0010h - голубой фон;

BACKGROUND_GREEN = 0020h - зеленый фон;

BACKGROUND_RED = 0040h - красный фон;

BACKGROUND_INTENSITY = 0080h- фон повышенной яркости.

Для задания белого цвета складываются три цветовых компонента, для задания черного компоненты не задаются вовсе.

 

Для самостоятельной работы:

Разработать программу с использование API-функций высокоуровневого консольного ввода-вывода, позволяющую ввести с клавиатуры строку из 30 символов, а затем вывести эту строку в качестве заголовка консольного окна и в качестве содержимого экранного буфера консоли. При выводе строки в экранный буфер предусмотреть вариант повторного вывода строки с изменением позиции курсора и цветового оформления текста (Решение в папке win_02).

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: