Поделиться через


Функции вывода консоли низкого уровня

Важно!

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

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

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

Function Description
ReadConsoleOutputCharacter Копирует строку символов Юникода или ANSI из буфера экрана.
WriteConsoleOutputCharacter Записывает строку символов Юникода или ANSI в буфер экрана.
ReadConsoleOutputAttribute Копирует строку атрибутов цвета текста и фона из буфера экрана.
WriteConsoleOutputAttribute Записывает строку атрибутов цвета текста и фона в буфер экрана.
FillConsoleOutputCharacter Записывает один символ Юникода или ANSI в указанное число последовательных ячеек в буфере экрана.
FillConsoleOutputAttribute Записывает сочетание атрибута цвета текста и фона в указанное число последовательных ячеек в буфере экрана.

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

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

Function Description
ReadConsoleOutput Копирует данные символов и цветов из указанного блока ячеек буфера экрана в заданный блок в целевом буфере.
WriteConsoleOutput Записывает данные символа и цвета в указанный блок ячеек буфера экрана из заданного блока в исходном буфере.

Эти функции обрабатывают буферы экрана и исходные или конечные буферы как двухмерные массивы структур CHAR_INFO (содержащие данные атрибута символа и цвета для каждой ячейки). Функции указывают ширину и высоту в ячейках символов исходного или целевого буфера, а указатель на буфер обрабатывается как указатель на ячейку источника (0,0) двухмерного массива. Функции используют структуру SMALL_RECT , чтобы указать, какой прямоугольник для доступа к буферу экрана консоли, а координаты левой верхней левой ячейки в исходном или целевом буфере определяют расположение соответствующего прямоугольника в этом буфере.

Эти функции автоматически закрепят указанный прямоугольник буфера экрана, чтобы поместиться в границы буфера экрана консоли. Например, если прямоугольник задает правые координаты нижнего справа (столбец 100, строка 50) и буфер экрана консоли составляет всего 80 столбцов, координаты обрезаются таким образом, чтобы они были (столбец 79, строка 50). Аналогичным образом этот настроенный прямоугольник снова обрезается, чтобы поместиться в границы исходного или целевого буфера. Указаны координаты буфера экрана фактического прямоугольника, считываемого или записанного. Пример использования этих функций см. в разделе "Чтение и запись блоков символов и атрибутов".

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

screen buffer window with destination buffer