C++ 为什么我的隐藏控制台滚动条的功能随机停止工作?

C++ 为什么我的隐藏控制台滚动条的功能随机停止工作?,c++,winapi,C++,Winapi,我基于一个函数,该函数是作为对另一个查询()的回答提供的,当我最初使用它时,它工作得很好,但是现在它已经停止工作了 我已经把另一个人的解决方案复制到我的解决方案中,但这也不起作用 这是我在main函数中复制的代码,尝试尽可能地对其进行精简,但仍然不起作用: int main() { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO screenBuffer;

我基于一个函数,该函数是作为对另一个查询()的回答提供的,当我最初使用它时,它工作得很好,但是现在它已经停止工作了

我已经把另一个人的解决方案复制到我的解决方案中,但这也不起作用

这是我在main函数中复制的代码,尝试尽可能地对其进行精简,但仍然不起作用:

int main() {
 
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    
    CONSOLE_SCREEN_BUFFER_INFO screenBuffer;
    GetConsoleScreenBufferInfo(hStdOut, &screenBuffer);

    screenBuffer.dwSize.X = screenBuffer.dwMaximumWindowSize.X;
    screenBuffer.dwSize.Y = screenBuffer.dwMaximumWindowSize.Y;
    SetConsoleScreenBufferSize(hStdOut, screenBuffer.dwSize);

    HWND window = GetConsoleWindow();
    ShowScrollBar(window, SB_BOTH, FALSE);

    getchar();
    return 0;
}

编辑-我认为
ShowScrollBar
功能有缺陷,因为它在有或没有以下内容的情况下间歇性工作

在调用
ShowScrollBar
之前更新窗口似乎已经解决了问题

int main() {
 
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    
    CONSOLE_SCREEN_BUFFER_INFO screenBuffer;
    GetConsoleScreenBufferInfo(hStdOut, &screenBuffer);

    screenBuffer.dwSize.X = screenBuffer.dwMaximumWindowSize.X;
    screenBuffer.dwSize.Y = screenBuffer.dwMaximumWindowSize.Y;
    SetConsoleScreenBufferSize(hStdOut, screenBuffer.dwSize);

    HWND window = GetConsoleWindow();
    UpdateWindow(window);
    ShowScrollBar(window, SB_BOTH, FALSE);

    getchar();
    return 0;
}

执行
SetConsoleScreenBufferSize
功能时,控制台有时不会立即调整大小(调整控制台大小需要一段时间),因此
ShowScrollBar
隐藏了控制台,而控制台的大小没有调整

调整控制台大小后,滚动条将重新出现。无论您如何隐藏滚动条,当您调整控制台大小或滚动鼠标滚轮时,滚动条将重新出现

因此,您只需在
showcollbar
之前添加延迟并等待控制台调整大小

e、 p


捕获
ShowScrollBar
的返回值。如果返回值为false,请运行以查看错误代码。该死,它是true@askman嗨,对你有用吗?
 ...
 SetConsoleScreenBufferSize(hStdOut, screenBuffer.dwSize);
 Sleep(10);
 HWND window = GetConsoleWindow();
 ShowScrollBar(window, SB_BOTH, FALSE);