Low-Level 控制台输出函数

重要

本文档介绍不再是 生态系统路线图的一部分的控制台平台功能。 我们不建议在新产品中使用此内容,但我们将继续支持未来无限期的现有使用情况。 我们首选的新式解决方案侧重于 虚拟终端序列 ,以实现跨平台方案中的最大兼容性。 可以在 经典控制台与虚拟终端 文档中找到有关此设计决策的详细信息。

低级控制台输出函数提供对屏幕缓冲区的字符单元格的直接访问。 一组函数从控制台屏幕缓冲区中的任何位置开始读取或写入连续单元格。 另一组函数从矩形单元格块读取或写入。

以下函数从屏幕缓冲区中读取或写入到指定数量的连续字符单元格,以指定单元格开头。

功能 DESCRIPTION
ReadConsoleOutputCharacter 从屏幕缓冲区复制 Unicode 或 ANSI 字符字符串。
WriteConsoleOutputCharacter 将 Unicode 或 ANSI 字符的字符串写入屏幕缓冲区。
ReadConsoleOutputAttribute 从屏幕缓冲区复制文本和背景色属性字符串。
WriteConsoleOutputAttribute 将文本和背景色属性的字符串写入屏幕缓冲区。
FillConsoleOutputCharacter 将单个 Unicode 或 ANSI 字符写入屏幕缓冲区中指定数量的连续单元格。
FillConsoleOutputAttribute 将文本和背景色属性组合写入屏幕缓冲区中指定数量的连续单元格。

对于所有这些函数,遇到行的最后一个单元格时,读取或写入将环绕到下一行的第一个单元格。 当遇到控制台屏幕缓冲区最后一行的末尾时,写入函数将丢弃所有未写字符或属性,读取函数将报告实际写入的字符数或属性数。

以下函数读取或写入到屏幕缓冲区中指定位置的矩形字符单元格块。

功能 DESCRIPTION
ReadConsoleOutput 将指定屏幕缓冲区单元格块中的字符和颜色数据复制到目标缓冲区中的给定块中。
WriteConsoleOutput 将字符和颜色数据从源缓冲区中的给定块写入指定屏幕缓冲区单元格块。

这些函数将屏幕缓冲区和源或目标缓冲区视为 CHAR_INFO 结构的二维数组(包含每个单元格的字符和颜色属性数据)。 这些函数指定源缓冲区或目标缓冲区的宽度和高度,并且指向缓冲区的指针被视为指向二维数组的原点单元格(0,0) 的指针。 这些函数使用 SMALL_RECT 结构指定要在控制台屏幕缓冲区中访问的矩形,源或目标缓冲区中左上方单元格的坐标决定了该缓冲区中相应矩形的位置。

这些函数会自动剪辑指定的屏幕缓冲区矩形,以适应控制台屏幕缓冲区的边界。 例如,如果矩形指定右下角坐标(第 100 列,第 50 行),并且控制台屏幕缓冲区宽只有 80 列,则坐标将被剪裁,以便它们(第 79 列,第 50 行)。 同样,此调整后的矩形再次被剪裁,以适应源或目标缓冲区的边界。 指定读取或写入到的实际矩形的屏幕缓冲区坐标。 有关使用这些函数的示例,请参阅 读取和写入字符和属性块

此图显示了 一个 ReadConsoleOutput 作,其中剪辑发生在从控制台屏幕缓冲区读取块时,并在块复制到目标缓冲区时再次发生。 该函数报告从中复制的实际屏幕缓冲区矩形。

包含目标缓冲区的屏幕缓冲区窗口