声明 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