重要
本文档介绍不再是 生态系统路线图的一部分的控制台平台功能。 我们不建议在新产品中使用此内容,但我们将继续支持未来无限期的现有使用情况。 我们首选的新式解决方案侧重于 虚拟终端序列 ,以实现跨平台方案中的最大兼容性。 可以在 经典控制台与虚拟终端 文档中找到有关此设计决策的详细信息。
控制台窗口显示活动屏幕缓冲区的一部分。 每个屏幕缓冲区维护其自己的当前窗口矩形,该矩形指定要显示在控制台窗口中的左上角和右下角字符单元格的坐标。 若要确定屏幕缓冲区的当前窗口矩形,请使用 GetConsoleScreenBufferInfo。 创建屏幕缓冲区时,窗口的左上角位于控制台屏幕缓冲区的左上角(0,0)。
窗口矩形可以更改为显示控制台屏幕缓冲区的不同部分。 屏幕缓冲区的窗口矩形在以下情况下可能会更改:
调用 SetConsoleWindowInfo 以指定新的窗口矩形时,它会通过更改窗口矩形的位置而不更改窗口大小来滚动控制台屏幕缓冲区的视图。 有关滚动窗口内容的示例,请参阅 滚动屏幕缓冲区的窗口。
当使用 WriteFile 函数写入屏幕缓冲区时,启用换行(EOL)输出模式时,窗口矩形会自动移动,因此始终显示光标。
当 SetConsoleCursorPosition 函数指定位于当前窗口矩形边界之外的新游标位置时,窗口矩形会自动移动以显示光标。
当用户更改控制台窗口的大小或使用窗口的滚动条时,活动屏幕缓冲区的窗口矩形可能会更改。 此更改不会报告为输入缓冲区中的窗口大小调整事件。
在上述每种情况下,窗口矩形将移动以显示控制台屏幕缓冲区的不同部分,但主机屏幕缓冲区的内容保持不变。 以下情况可能导致控制台屏幕缓冲区的内容发生移动:
- 调用 ScrollConsoleScreenBuffer 函数时,将矩形块从屏幕缓冲区的一部分复制到另一部分。
- 使用 WriteFile 在启用 EOL 输出模式换行的情况下写入屏幕缓冲区时,当遇到控制台屏幕缓冲区的末尾时,控制台屏幕缓冲区的内容会自动滚动。 此滚动将放弃控制台屏幕缓冲区的上一行。
ScrollConsoleScreenBuffer 指定移动的控制台屏幕缓冲区矩形以及将矩形复制到的新左上角坐标。 此函数可以滚动控制台屏幕缓冲区的部分或整个内容。
此图显示了 ScrollConsoleScreenBuffer 作,该作将控制台屏幕缓冲区的整个内容向上滚动几行。 将丢弃顶部行的内容,底部行填充指定的字符和颜色。
ScrollConsoleScreenBuffer 的效果可以通过指定可选的剪辑矩形来限制,以便剪裁矩形外部控制台屏幕缓冲区的内容保持不变。 剪辑的效果是创建一个子窗口(剪裁矩形),其内容滚动而不影响主机屏幕缓冲区的其余部分。 有关使用 ScrollConsoleScreenBuffer 的示例,请参阅 滚动屏幕缓冲区的内容。