在 C 中实现来自 (windows.h) 的 API 函数后控制台屏幕隐藏

Console Screen Hides after implementing a API function from (windows.h)in C

我是 C 语言的新手,但有使用高级语言的经验,例如 java、python.....等

我正在尝试在 Windows OS 中调整控制台 window 的大小。使用“windows.h”头文件中的“SetConsoleWindowInfo 和 SetConsoleScreenBufferSize”函数。

但是当我尝试 运行 该代码时,控制台 window 隐藏在任务栏中并且没有任何反应。当我尝试 运行 vsCode 中的代码时,集成终端不打印任何内容。

这是我的代码

void setConsole(short consolePos_X, short consolePos_Y, short consoleWidth, short consoleHeight){

HANDLE wConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);

SMALL_RECT consoleWinSize = {consolePos_X, consolePos_Y, consolePos_X+consoleWidth, consolePos_Y+consoleHeight};
SetConsoleWindowInfo(wConsoleHandle, TRUE, &consoleWinSize);

COORD buffSize = {100, 50};
SetConsoleScreenBufferSize(wConsoleHandle, buffSize);
SetConsoleTitle("Snake Game");

我认为问题出在设置缓冲区大小上,但我不确定。

希望我能得到解决方案。 提前致谢...!

按如下方式更改您的代码:

HANDLE wConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
if (wConsoleHandle == INVALID_HANDLE_VALUE) {
    fprintf(stderr, "GetStdHandle failed with error %d\n", GetLastError());
    return;
}

这里应该没有错误,除非你的应用程序没有分配控制台。

同时修改如下:

if (!SetConsoleWindowInfo(wConsoleHandle, TRUE, &consoleWinSize)) {
    fprintf(stderr, "SetConsoleWindowInfo failed with error %d\n", GetLastError());
    return;
}

错误很可能是87(参数无效)。检查值,尤其是 consoleWinSize。如果是,那就看this and this.

嘿,我找到了解决方案。

问题是“ConsoleScreenBufferSize”不应小于“ConsoleWindowSize”(More info here)。但是我使用了一个小于“ConsoleSize”的“BufferSize”。所以问题就出来了。

这个问题的解决方法就是使用大于或等于“ConsoleSize”的“BufferSize”。 如下:

 COORD coord = {consoleWidth, consoleHeight};
     SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), &coord);

这很好用。 如果您有任何疑问,请在此处发表评论。 我会尽量在空闲时间回答

希望这有用..!