【问题标题】:Declaring SMALL_RECT = {}, does not resize the console window声明 SMALL_RECT = {},不会调整控制台窗口的大小
【发布时间】:2017-05-09 15:20:10
【问题描述】:

我只是在玩简单的 C++ 控制台应用程序。

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

P.S 我正在使用 TDM-GCC 64 和带有 std=c++17 的 Eclipse

这可以正常工作,并且窗口大小已正确调整

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);
}

这并不是那么重要。代码行数越少越好,我只是很好奇为什么它不起作用。

【问题讨论】:

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


    【解决方案1】:

    它不起作用的原因是因为根据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
    

    【讨论】:

    • @SteelShot 没问题。很高兴能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2019-06-17
    • 2013-07-10
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    相关资源
    最近更新 更多