可以打开窗口的 Win32 控制台应用程序

2024-03-17

我的问题很简单。在 Ubuntu 中,程序通常可以使用或不使用 GUI 进行部署,也许可以使用 --showGUI 之类的标志。我本质上想在 Windows 中重新创建此功能,但似乎 Windows 应用程序以 win_main 开头,而控制台应用程序以 main 开头。

那么产生这种行为所需的基本结构是什么呢?例如。在 Visual Studio 2012 中,我应该从 Windows 应用程序开始,然后隐藏窗口并写入控制台吗?或者我可以从一个空的控制台应用程序开始并使用 Windows API 创建一个窗口吗?

Thanks

(c/c++,顺便说一句)


控制台应用程序一开始就附加到控制台。然后它可以创建它认为合适的窗口——本质上与专门为窗口子系统编写的应用程序没有什么不同。

理论上,您可以执行相反的操作:为 Windows 子系统创建一个应用程序,然后将控制台附加到它。但这增加了相当多的额外工作。标准库中的启动代码通常会做一些工作,将 stdin/cin、stdout/cout、stderr/cerr 连接到控制台。如果您创建一个 Windows 子系统程序,然后附加一个控制台,则基本上必须重现该代码以将控制台附加到标准流。

因此,通常最简单的做法是从为控制台子系统编写的程序启动并让它创建窗口,而不是从为 Windows 子系统编写的程序启动并让它创建/附加控制台。

据,直到...为止main vs. WinMain如下:这控制程序默认链接到哪个子系统。也就是说,如果你有一个名为main,它将默认为控制台子系统。如果你有一个名为WinMain,它将默认为 windows 子系统(如果你定义了两者,我不记得它会做什么——我建议不要这样做)。

但是,如果您愿意,您可以使用链接器标志强制选择子系统,因此您可以使用main作为 Windows 子系统程序的入口点,或者WinMain作为控制台子系统程序的入口点。不过,我通常建议不要这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以打开窗口的 Win32 控制台应用程序 的相关文章

随机推荐