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

10.14.Низкоуровневые функции ввода и вывода консоли

Эти функции расширяют возможности приложения путем предоставления ему прямого доступа к входному буферу консоли и дисплейным буферам. Эти функции позволяют решать следующие задачи:

  • получать события мыши и события изменения размеров дисплейного буфера;

  • получать расширенную информацию о событиях клавиатуры;

  • записывать входные записи во входной буфер;

  • читать входные записи без удаления их из входного буфера;

  • получать информацию об еще необработанных событиях, находящихся во входном буфере;

  • очищать входной буфер;

  • читать и записывать строки Unicode или ANSI символов в указанную позицию дисплейного буфера;

  • читать и записывать строки текста и атрибуты цвета фона в заданную позицию дисплейного буфера;

  • читать или записывать прямоугольные блоки символов и атрибутов цвета в заданную позицию дисплейного буфера;

  • читать и записывать Unicode или ANSI символ, или текст и цветовые атрибуты в указанное число последовательно расположенных знакомест дисплейного буфера.

 

10.15.Низкоуровневые режимы консоли

Типы событий, записываемых во входной буфер консоли, зависят от установленных входных режимов окна и мыши. Входной режим консоли определяет то, каким образом система обрабатывает комбинацию клавиш ctrl+c. Для установки или получения входных режимов консоли приложение должно определить дескриптор входного буфера консоли с помощью функций SetConsoleMode() или GetConsoleMode(). В следующей таблице перечислены режимы, которые можно использовать совместно с входными дескрипторами консоли.

Таблица

Входные режимы консоли

Режим

Описание

ENABLE_MOUSE_INPUT

Управляет записью событий мыши во входной буфер. По умолчанию, ввод от мыши включен и ввод окна отключен. Изменение любого из этих режимов оказывает влияние только на последующий ввод; необработанные события мыши или окна не сбрасываются. Указатель мыши отображается независимо от режима мыши

ENABLE_WINDOW_INPUT

Управляет тем, будут ли события изменения размеров дисплейного буфера записываться во входной буфер. По умолчанию, ввод от мыши включен и ввод окна отключен. Изменение любого из этих режимов оказывает влияние только на последующий ввод; необработанные события мыши или окна не сбрасываются. Указатель мыши отображается независимо от режима мыши

ENABLE_PROCESSED_INPUT

Управляет обработкой ввода приложениями, использующими высокоуровневые функции ввода/вывода. Тем не менее, если этот режим включен, комбинация ctrl+c не записывается во входной буфер консоли; вместо этого он передается соответствующей функции

Выходные режимы дисплейного буфера не оказывают воздействия на поведение низкоуровневых функций вывода.

10.16.Низкоуровневые функции ввода консоли

Входной буфер консоли содержит входные записи, которые могут включать информацию о клавиатуре, мыше, изменении размеров буферов, фокусировке и событиях меню. Низкоуровневые функции предоставляют прямой доступ к буферу ввода, в отличие от высокоуровневых функций, которые фильтруют и обрабатывают данные входного буфера, отбрасывая все, кроме ввода с клавиатуры.

Win32 API предоставляет пять низкоуровневых функций для получения доступа к входному буферу консоли:

  • ReadConsoleInput

  • PeekConsoleInput

  • GetNumberOfConsoleInputEvents

  • WriteConsoleInput

  • FlushConsoleInputBuffer

Функции ReadConsoleInput(), PeekConsoleInput() и WriteConsoleInput() используют структуру INPUT_RECORD для чтения данных из буфера и записи в него.

Таблица

Назначение низкоуровневых функций ввода консоли

Функция

Описание

ReadConsoleInput

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

PeekConsoleInput

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

GetNumberOfConsoleInputEvents

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

WriteConsoleInput

Помещает входные записи в буфер ввода после всех имеющихся в нем записей. Размер входного буфера увеличивается автоматически для того, чтобы внем поместились все записи. Указанные входной буфер должен иметь статус GENERIC_WRITE для того, чтобы можно было использовать эту функцию

FlushConsoleInputBuffer

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

Поток процесса может выполнять ожидать того момента времени, когда во входном буфере появятся доступные записи. Для иницирования операции ожидания необходимо указать дескриптор буфера ввода в вызове любой функции ожидания. Эти функции возвратят управление, когда один или несколько объектов перейдут в сигнальное состояние. Сигнальное состояние возникнет в том случае, когда во входном буфере появятся непрочитанные записи. Сигнальное состояние будет сброшено, когда входной буфер станет пустым. Если записей в буфере ввода нет, вызывающий поток войдет в эффективное состояние ожидания, которое отнимает минимум процессорного времени в ожидании наступления события, которое ожидается.

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