将水平滚动条添加到控制台

Add Horizontal Scroll Bar to Console

本文关键字:控制台 添加 滚动条 水平      更新时间:2023-10-16

我正在用C++编写一个程序,该程序将一些文本输出到控制台。但是,这段文字通常很长,但我需要在一行上使用它。程序不会继续在同一行上写入,而是转到下一行并在那里写入。

有没有办法让程序写到同一行,并添加一个水平滚动条,以便我可以看到所有内容?

例如,以下代码在多行上输出字母 a。

#include <iostream>
using namespace std;

int main() {
for (int n = 0; n < 1000; n++) {
cout << "a";
}
}

有没有办法让所有"a"输出在同一行上?显然,这不适合控制台屏幕。那么,如何添加水平滚动条以查看所有内容?

此问题特定于操作系统,无法使用标准C++解决。正如您在评论中所说的您正在使用 Windows 一样,您需要查看 Microsoft 提供的文档。

以下是与控制台交互的功能列表:https://learn.microsoft.com/en-us/windows/console/console-functions

您感兴趣的是

BOOL WINAPI SetConsoleScreenBufferSize(
_In_ HANDLE hConsoleOutput,
_In_ COORD  dwSize
);

如果您不知道控制台屏幕缓冲区是什么,Micrososft 在解释它方面比我做得更好,所以这里是: https://learn.microsoft.com/en-us/windows/console/console-screen-buffersenter 链接说明在这里

对您来说,重要的部分是控制台屏幕缓冲区是一个二维数组。更改数组大小,然后更改行的长度。

编辑 0: 这是我刚刚使用Visual Studio 2017和C++在最新的Windows 10内部版本中编写的示例代码。

执行SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),coordinates)后,所有内容都在一行上,并且有一个滚动条。但是有一个问题:此解决方案仅在用户不调整控制台大小时才有效。用户调整窗口大小后,一切都像以前一样。这个问题可能可以通过挖掘Microsoft的文档来解决。还没有机会这样做。

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
for (short int i = 0; i < 1000; i++)
{
cout << "a";
}
cout << endl;
_COORD coordinates;
coordinates.X = 1000;
coordinates.Y = 1000;
if (0 == SetConsoleScreenBufferSize(
GetStdHandle(STD_OUTPUT_HANDLE),
coordinates
))
{
return -1;
}
for (short int i = 0; i < 1000; i++)
{
cout << "b";
}
cout << endl;
return 0;
}

以下代码不是严格需要的:

for (short int i = 0; i < 1000; i++)
{
cout << "b";
}

Windows 将在重新捕获缓冲区之前重新格式化已打印的任何内容。

在写入控制台缓冲区之前,使用SetConsoleScreenBufferSizeSetConsoleScreenBufferInfoEx函数更改控制台缓冲区的大小。