声明 SMALL_RECT = {},不会调整控制台大小 window
Declaring SMALL_RECT = {}, does not resize the console window
我只是在玩 C++ 中的简单控制台应用程序。
我正在尝试调整控制台的大小 window,它工作正常。首先我调整实际 window 的大小,然后调整缓冲区,一切都很好,但是一旦我尝试压缩代码,window 就不再调整大小。这真的不是那么重要。我只是想知道,因为我看过的大多数建议都是这样声明 SMALL_RECT
的。
P.S 我正在使用 TDM-GCC 64 和 Eclipse with std=c++17
这行得通并且 window 已正确调整大小
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);
}
但是这不起作用,window 保持默认大小
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);
}
这并不是那么重要。代码行越少越好,我只是很好奇为什么它不起作用。
它不起作用的原因是因为根据 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
我只是在玩 C++ 中的简单控制台应用程序。
我正在尝试调整控制台的大小 window,它工作正常。首先我调整实际 window 的大小,然后调整缓冲区,一切都很好,但是一旦我尝试压缩代码,window 就不再调整大小。这真的不是那么重要。我只是想知道,因为我看过的大多数建议都是这样声明 SMALL_RECT
的。
P.S 我正在使用 TDM-GCC 64 和 Eclipse with std=c++17
这行得通并且 window 已正确调整大小
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);
}
但是这不起作用,window 保持默认大小
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);
}
这并不是那么重要。代码行越少越好,我只是很好奇为什么它不起作用。
它不起作用的原因是因为根据 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