Низкоуровневые консольные функции вывода данных
Низкоуровневые консольные функции вывода данных обеспечивают прямой доступ к символьным знакоместам экранного буфера. Один набор функций читает из или записывает в последовательные ячейки, начинающиеся в любом месте в экранном буфере консоли. Другой набор функций читает из или записывает в прямоугольные блоки ячеек.
Нижеследующие функции чтения из или записи в заданное число последовательных символьных знакомест в экранном буфере, начинающихся с определенной ячейки.
Функция | Описание |
ReadConsoleOutputCharacter | Копирует строку символов Unicode или ANSI из экранного буфера. |
WriteConsoleOutputCharacter | Записывает строку символов Unicode или ANSI в экранный буфер. |
ReadConsoleOutputAttribute | Копирует строку текста и атрибуты цвета фона из экранного буфера дисплея. |
WriteConsoleOutputAttribute | Записывает строку текста и атрибуты цвет фона в экранном буфере дисплея. |
FillConsoleOutputCharacter | Записывает одиночный символ Unicode или ANSI в заданном числе последовательных ячеек в экранном буфере. |
FillConsoleOutputAttribute | Записывает текст и комбинацию атрибутов цвета фона в заданном числе последовательных ячеек в экранном буфере. |
Для всех этих функций, когда подходит последняя ячейка строки, операции чтения или записи автоматически переходят на новую строку обратно в первую ячейку следующей строки. Когда подходит конец последней строки экранного буфера консоли, функции записи сбрасывают все не записанные символы или атрибуты, а функции чтения сообщают о числе символов или атрибутах, действительно записанных.
Нижеследующие функции читают из или записывают в прямоугольные блоки символьных знакомест, в заданном месте экранного буфера.
Функция | Описание |
ReadConsoleOutput | Копирует символ и данные о цвете от заданного блока ячеек экранного буфера в данный блок в буфере назначения. |
WriteConsoleOutput | Записывает символ и данные о цвете в заданном блоке ячеек экранного буфера из данного блока в исходном буфере. |
Эти функции рассматривают экранные буферы и источниковый буфер или буферы назначения, как двухмерные массивы структур CHAR_INFO (содержащих символы и данные атрибутов цвета для каждой ячейки). Функции устанавливают ширину и высоту, в символьных знакоместах, буфера источника или буфера назначения, а указатель на буфер рассматривается как указатель на начальную ячейку с координатами (0,0) двухмерного массива. Функции используют структуру SMALL_RECT, которая определяет, какой прямоугольник доступен в экранном буфере консоли, и обуславливает координаты левой верхней ячейки в буфере источнике или буфере назначения в месте соответствующего прямоугольника в этом буфере.
Эти функции автоматически ограничивают определяемый прямоугольник экранного буфера, чтобы вместить его в пределах границ экранного буфера консоли. Например, если прямоугольник устанавливает нижние правые координаты, которые являются (столбец 100, строка 50), а экранный буфер консоли устанавливается шириной только 80 столбцов, координаты отсекаются так, чтобы они были (столбец 79, строка 50). Точно так же этот откорректированный прямоугольник снова отсекается, чтобы вместиться в пределах границ буфера назначения или источника. Координаты экранного буфера фактического прямоугольника, в котором происходит чтение из или запись в является установленным. Пример, который использует эти функции, посмотрите в статье Чтение и запись блоков символов и атрибутов.
Иллюстрация показывает операцию ReadConsoleOutput, где происходит отсечение по границам, когда блок читается из экранного буфера консоли, и снова, когда блок копируется в буфер назначения. Функция сообщает о фактическом прямоугольнике экранного буфера, который она скопировала.
Экранный буфер окна с буфером назначения.