Организация высокоуровневого консольного ввода-вывода
Для организации высокоуровневого ввода-вывода приложение может использовать функции консольного ввода-вывода 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 символов, а затем вывести эту строку в качестве заголовка консольного окна и в качестве содержимого экранного буфера консоли. При выводе строки в экранный буфер предусмотреть вариант повторного вывода строки с изменением позиции курсора и цветового оформления текста.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|