声明SMALL_RECT={}不会调整控制台窗口的大小 我只是在C++中简单的控制台应用程序玩。

声明SMALL_RECT={}不会调整控制台窗口的大小 我只是在C++中简单的控制台应用程序玩。,c++,windows,c++17,windows-console,C++,Windows,C++17,Windows Console,我正在尝试调整控制台窗口的大小,效果很好。首先我调整实际窗口的大小,然后调整缓冲区,一切正常,但一旦我尝试压缩代码,窗口就不再调整大小。其实没那么重要。我只是想知道,我看到的大多数建议都是这样声明SMALL\RECT 另外,我正在使用TDM-GCC64和Eclipse以及std=c++17 这可以正常工作,并且窗口的大小调整正确 void SetCMDSizeAndTitle(short width, short height, string title) { COORD coord =

我正在尝试调整控制台窗口的大小,效果很好。首先我调整实际窗口的大小,然后调整缓冲区,一切正常,但一旦我尝试压缩代码,窗口就不再调整大小。其实没那么重要。我只是想知道,我看到的大多数建议都是这样声明
SMALL\RECT

另外,我正在使用TDM-GCC64和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);
}

这其实并不重要。当代码行数较少时,它会更好,我只是想知道为什么它不起作用。

它不起作用的原因是,根据假设的顺序,变量不符合您假设的顺序。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

@没问题。很乐意帮忙。