我在更改控制台大小时遇到问题。这是我的代码:
BOOL setConsole(int x, int y)
{
hStdin = GetStdHandle(STD_INPUT_HANDLE);
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdin == INVALID_HANDLE_VALUE ||
hStdout == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, TEXT("GetStdHandle"),
TEXT("Console Error"), MB_OK);
return false;
}
SMALL_RECT windowSize = {0, 0, x-1, y-1};
// Change the console window size:
SetConsoleWindowInfo(hStdout, TRUE, &windowSize);
COORD c = { x, y};
//Change the internal buffer size:
SetConsoleScreenBufferSize(hStdout, c);
SetConsoleDisplayMode(hStdout,CONSOLE_FULLSCREEN_MODE, &c);
return true;
}
当我试图放大控制台时,它工作得非常好。当一个参数比前一个小时,什么也没发生。出了什么问题?
@edit:经过一些测试,我注意到,如果我一次改变一个参数,调整大小(缩小)是可能的。示例(假设控制台是100 x100)
setConsole(90,90); //dosen't work.
setConsole(90,100);
setConsole(90,90); // works perfectly
为什么?
5条答案
按热度按时间s3fp2yjn1#
SetConsoleScreenBufferSize
更改控制台内部缓冲区的大小。更改它对控制台窗口范围没有影响。如果需要对控制台的可见部分(缓冲区)产生影响,请调用SetConsoleWindowInfo
。窗口缓冲区不能小于内部缓冲区,减小窗口缓冲区也会减小内部缓冲区,但不是相反。
如果使用COORDs中的非法值调用
SetConsoleScreenBufferSize
(例如,高度/宽度太小),则会得到错误,通常为87 'invalid argument'.
请尝试以下代码:
7eumitmz2#
派对迟到了...
根据MSDN的设计和一些测试,屏幕缓冲区不能设置为小于窗口的范围,或者窗口的范围不能设置为大于屏幕缓冲区。
一种方法是在改变缓冲区大小之前将窗口缩小到最小:
eivgtgni3#
验证码:
lkaoscv74#
我于12年10月15日修改了“Software_Designer”提供的代码,并创建了一个命令行实用程序来设置控制台大小和滚动缓冲区。
我使用DEV C++(http://www.bloodshed.net/devcpp.html)编译了它。
https://sourceforge.net/projects/wa2l-wintools/中包含了一个可执行文件,希望这能有所帮助。
iyfamqjs5#