有没有办法设置控制台高度(行)?

时间:2012-02-11 04:50:14

标签: c++ visual-c++

是否可以设置控制台在开始删除顶部之前打印的行数?例如,是否可以将其设置为3并且仅显示最后3行?所以:

std::cout<<"line 1!"<<std::endl;
std::cout<<"line 2!"<<std::endl;
std::cout<<"line 3!"<<std::endl;
std::cout<<"line 4!"<<std::endl;
system("pause");

输出:

line 3!
line 4!
Press any key to continue...

^而不在侧面创建滚动条。

我一直在尝试使用Console::BufferHeight,但我似乎无法让它发挥作用。这是我能找到的唯一一件似乎与我想做的事情相近的事情:http://msdn.microsoft.com/en-us/library/system.console.bufferheight.aspx但它只是展示了如何阅读它,而不是如何设置尺寸。由于某些原因,仅键入std::cout<<System::Console::BufferHeight;会给我带来范围错误。任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

我想你想要这个:

实施例,

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 
SMALL_RECT rect = {0,0, 100, 100};
SetConsoleWindowInfo(hConsole, TRUE, &rect)

也看看这些(试验它们):

MSDN上有一个示例here

答案 1 :(得分:0)

我也是编程新手,但我试过了:

while(!cin.get())
{
}

并且它有效,尝试将其放在代码的底部。它会在你的控制台上创造奇迹!

尝试更改其位置(将其放在代码中间)

答案 2 :(得分:0)

我建议你自己保留这些行,在一个快速的类中,说通过使用一个迭代器来循环放置下一行的循环,该迭代器总是设置为指向要输入的下一行。
<登记/> 接下来,使用FillConsoleOutputCharacter()在您之前在那里打印的行上打印空白。

然后,在您希望输入开始的位置上方使用SetConsoleCursorPosition()到四行(或多行所需的行),并在循环中输出每一行,从之后的迭代器开始。这将按照从最年长到最年轻的顺序打印所有行。

有一段时间了,所以我对C ++的了解有点朦胧,但这应该很简单标准库和win32库。