2

我正在寻找一种在我的程序中隐藏控制台(在 Windows 中)的方法,我发现了这段代码:

#if defined (__WIN32__)
    #include <windows.h>
    HWND hWnd = GetConsoleWindow();
    ShowWindow(hWnd, SW_HIDE);
#endif

但是,codeblocks 不断给我error: expected constructor, destructor, or type conversion before '(' token. 我究竟做错了什么?

mac和linux中隐藏控制台的代码是什么?我不经常使用 mac 或 linux,但我想让我的程序平台独立。是否有适用于所有平台的代码?编译时控制台甚至出现在mac和linux中吗?

4

1 回答 1

4

一般来说,控制台应用程序不应该弄乱它们的窗口。如果你需要更高级的东西(显示/隐藏你的窗口,决定它的大小,......)你应该切换到一个 GUI 应用程序。即使您不想要任何窗口也是如此:创建一个 GUI 应用程序而不创建窗口。

在 Mac 和 Linux 上,当您启动可执行文件时,默认情况下不显示控制台(GUI 和控制台可执行文件之间没有区别);如果您在终端中启动它,则应用程序无法对其进行太多控制(除非它使用转义码,但它们用于控制文本格式/定位)。您可以使用一些启发式方法来猜测所使用的终端仿真器并告诉它隐藏,但它丑陋、繁琐,并且再次违背了控制台应用程序的目的。

就您的代码片段而言,您不能将其#include放在函数体中:您应该将这些内容分成两部分:

在文件的顶部:

#ifdef __WIN32__
    #define _WIN32_WINNT 0x0500
    #include <windows.h>
#endif

函数体内:

#ifdef __WIN32__
    ShowWindow(GetConsoleWindow(), SW_HIDE);
#endif
于 2011-07-18T00:43:41.097 回答