声明SMALL_RECT = {},不会调整控制台窗口的大小

时间:2017-05-09 15:20:11

标签: c++ windows c++17 windows-console

我正在玩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);
}

这不是那么重要。如果代码行数较少,那就更好了,我只是好奇为什么它不起作用。

1 个答案:

答案 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