【发布时间】:2012-10-05 17:27:24
【问题描述】:
我在更改控制台大小时遇到问题。这是我的代码:
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:经过一些测试,我注意到,如果我一次更改一个参数,则可以调整大小(缩小)。示例(假设控制台为 100x100)
setConsole(90,90); //dosen't work.
setConsole(90,100);
setConsole(90,90); // works perfectly
为什么?!
【问题讨论】:
-
提示:检查这些操作是否失败,如果失败,请检查 GetLastError() 以获取错误代码。
-
一切正常,没有出现错误。
-
嗯,这是错误的方法。你不能让它变大。窗口不能大于缓冲区,它将失败并返回错误 87。
-
您是否使用 GetLargestConsoleWindowSize 检查了您的坐标?
标签: c++ winapi console-application