【问题标题】:How to avoid the unnecessary console window如何避免不必要的控制台窗口
【发布时间】:2015-08-15 11:59:18
【问题描述】:

我对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;
}

【问题讨论】:

  • 第一个选择创建 WinForms 应用程序。
  • 您正在创建一个控制台应用程序,而应该创建一个 win32 应用程序。
  • 我希望有更好的 cmets,例如“抛出这些头文件并调用这些方法而不是那个”。无论谁对我的问题投了反对票,请提出一种更好的提问方式,而不是投反对票。
  • @Scevola 然后问better questions
  • 我投票决定重新提出这个问题,因为对提议的副本的答案并没有真正解决这个问题。 this 问题的答案是:编写一个在 WINDOWS 子系统而不是 CONSOLE 子系统中运行的应用程序。

标签: c++ windows winapi


【解决方案1】:

当您为 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 更改子系统:


请注意,我将字符编码更改为使用 Unicode。这是 Windows 内部使用的默认编码。要让编译器选择wWinMain 入口点,您需要在项目设置中相应地设置字符编码(General -> Character Set: Use Unicode Character Set)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多