SetConsoleScreenBufferInfoEx ... bug?

时间:2016-03-09 20:07:35

标签: windows console-application

每次运行此代码(在Win7上)时,控制台都会在两个方向上缩小1个字符。

int wmain( INT argc, WCHAR **argv )  
{  
    CONSOLE_SCREEN_BUFFER_INFOEX csbi;  
    csbi.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);  
    GetConsoleScreenBufferInfoEx(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);  
    wprintf(L"Window: %u x %u\n", csbi.srWindow.Right - csbi.srWindow.Left + 1, csbi.srWindow.Bottom - csbi.srWindow.Top + 1);  
    SetConsoleScreenBufferInfoEx(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);  
    return 0;  
}

我怀疑这种预期的行为。有记录吗?在较新版本的Windows中它是否更好?这是一个运行它几次的剪辑。

号码:\测试\释放> test.exe的
窗口:99 x 41

号码:\测试\释放> test.exe的
窗口:98 x 40

号码:\测试\释放> test.exe的
窗口:97 x 39

1 个答案:

答案 0 :(得分:1)

Windows控制台API中长期存在的“无法修复”错误。 您只需要做其他所有人都要做的事情,然后增加window.Bottom和window。阅读后立即添加。

GetConsoleScreenBufferInfoEx(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)
++csbi.srWindowBottom;
++csbi.srWindowRight;