我正在玩C ++中的简单控制台应用程序。
我正在尝试调整控制台窗口的大小,它工作正常。首先我调整实际窗口,然后缓冲区,一切都很好,但一旦我尝试压缩代码,窗口不再调整大小。这真的不那么重要。我一般都在想,因为我看到的大多数建议都是以SMALL_RECT
的方式声明。
P.S我使用TDM-GCC 64和Eclipse使用std = c ++ 17
这样可以正常调整窗口大小
void SetCMDSizeAndTitle(short width, short height, string title) {
COORD coord = { width, height };
SMALL_RECT rect;
rect.Top = 0;
rect.Left = 0;
rect.Bottom = height - 1;
rect.Right = width - 1;
SetConsoleTitle(TEXT(title.c_str()));
SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &rect);
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
但是这不起作用,窗口仍然是默认大小
void SetCMDSizeAndTitle(short width, short height, string title) {
COORD coord = { width, height };
SMALL_RECT rect = { 0, 0, height - 1, width -1 };
SetConsoleTitle(TEXT(title.c_str()));
SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &rect);
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
这不是那么重要。如果代码行数较少,那就更好了,我只是好奇为什么它不起作用。
答案 0 :(得分:0)
它不起作用的原因是因为根据MSDN变量不符合您的假设。 MSDN将结构定义为
typedef struct _SMALL_RECT {
SHORT Left;
SHORT Top;
SHORT Right;
SHORT Bottom;
}
这意味着您需要在初始化列表中遵循该顺序。这意味着你应该
SMALL_RECT rect = {0, 0, width -1, height - 1};
// L T R B