如何避免不必要的控制台窗口
Posted
技术标签:
【中文标题】如何避免不必要的控制台窗口【英文标题】: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 子系统中运行的应用程序。 【参考方案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)。
【讨论】:
以上是关于如何避免不必要的控制台窗口的主要内容,如果未能解决你的问题,请参考以下文章
在TCP的拥塞控制中,啥是慢开始、拥塞避免、快重传和快恢复算法