如何避免不必要的控制台窗口

时间:2015-08-15 11:59:18

标签: c++ windows winapi

我对c ++不太熟悉。当我编译并运行以下代码时,还会打开一个带有消息框的控制台窗口。我需要知道为什么,以及如何避免该控制台窗口。 我已经检查了重复的问题,但还没有找到合适的答案。

#include <Windows.h>
int main()
{
    char* title = "Message box title";
    char* message = "I am working";

    MessageBox(NULL, message, title, MB_OK | MB_ICONEXCLAMATION );
    return 0;
}

1 个答案:

答案 0 :(得分:5)

为CONSOLE子系统创建应用程序时(使用/SUBSYSTEM:CONSOLE链接器开关),系统会自动分配控制台。

如果您不希望系统为您的进程分配控制台,请指定/SUBSYSTEM:WINDOWS链接器开关。这还需要不同的应用程序入口点签名:

int APIENTRY wWinMain( HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPWSTR    lpCmdLine,
                       int       nCmdShow ) {

    const wchar_t* title = L"Message box title";
    const wchar_t* message = L"I am working";

    MessageBoxW( NULL, message, title, MB_OK | MB_ICONEXCLAMATION );
    return 0;
}

使用Visual Studio时,您可以通过项目设置GUI更改子系统:

enter image description here

<小时/> 注意,我更改了字符编码以使用Unicode。这是Windows在内部使用的默认编码。要使编译器选择wWinMain入口点,您需要相应地在项目设置中设置字符编码(常规 - &gt;字符集:使用Unicode字符集)。