窗口和屏幕缓冲区大小

屏幕缓冲区的大小以基于字符单元的坐标网格表示。 宽度是每行中的字符单元数,高度是行数。 与每个屏幕缓冲区关联的是决定控制台窗口中显示的控制台屏幕缓冲区矩形部分的大小和位置的窗口。 通过指定窗口矩形的左上和右下单元格的字符单元坐标来定义屏幕缓冲区的窗口。

注意

虚拟终端序列世界中,窗口的大小和屏幕缓冲区的大小固定为相同的值。 终端处理任何与屏幕缓冲区大小大于窗口大小的控制台等效的回滚区域。 该内容属于终端,通常不再作为可寻址区域的一部分。 有关详细信息,请参阅我们关于经典控制台功能与虚拟终端序列的比较。

屏幕缓冲区可以是任何大小,仅受可用内存限制。 屏幕缓冲区窗口的尺寸不能超过控制台屏幕缓冲区的相应尺寸或可根据当前字号(由用户独占控制)在屏幕上容纳的最大窗口。

GetConsoleScreenBufferInfo 函数返回关于屏幕缓冲区及其窗口的以下信息:

  • 控制台屏幕缓冲区的当前大小
  • 窗口的当前位置
  • 给定当前屏幕缓冲区大小、当前字号和屏幕大小时窗口的最大大小

GetLargestConsoleWindowSize 函数根据当前字体和屏幕大小返回控制台窗口的最大大小。 此大小不同于 GetConsoleScreenBufferInfo 返回的最大窗口大小,后者忽略了控制台屏幕缓冲区大小。

要更改屏幕缓冲区的大小,请使用 SetConsoleScreenBufferSize 函数。 如果指定大小的任何维度小于控制台窗口的相应维度,则此函数将失败。

要更改屏幕缓冲区窗口的大小或位置,请使用 SetConsoleWindowInfo 函数。 如果指定的窗口角坐标超出控制台屏幕缓冲区或屏幕的限制,则此函数将执行失败。 更改活动屏幕缓冲区的窗口大小会更改屏幕上显示的控制台窗口的大小。

进程可以更改其控制台的输入模式以启用窗口输入,以使进程在用户更改控制台屏幕缓冲区大小时能够接收输入。 如果应用程序启用了窗口输入,则可以使用 GetConsoleScreenBufferInfo 在启动时检索窗口和屏幕缓冲区大小。 然后,这些信息可用于确定数据在窗口中显示的方式。 如果用户更改控制台屏幕缓冲区大小,则应用程序可以通过更改数据的显示方式做出响应。 例如,如果每行的字符数发生变化,应用程序可以调整文本换行方式。 如果应用程序未启用窗口输入,则必须使用继承的窗口和屏幕缓冲区大小,或在启动期间将其设置为所需的大小,并在退出时还原继承的大小。 有关窗口输入模式的其他信息,请参阅低级控制台模式