【发布时间】:2011-02-12 14:17:47
【问题描述】:
是否有从控制台应用程序创建子窗口的 winAPI 函数(无类)。需要在窗口上打印图形,向控制台输入命令。
谢谢。
【问题讨论】:
是否有从控制台应用程序创建子窗口的 winAPI 函数(无类)。需要在窗口上打印图形,向控制台输入命令。
谢谢。
【问题讨论】:
为您的 GUI 应用程序创建控制台窗口更简单。 Have a look here
【讨论】:
我不确定您是否指的是“女儿”的具体含义,但控制台应用程序当然可以创建一个窗口(或任意数量)。窗口应用程序也可以分配控制台。
从窗口程序分配控制台理论上有点工作,但确实有一个优点:您可以使用您选择的应用程序框架(Qt、wxWidgets 等)编写大部分窗口“东西”
如果您直接使用 Windows API,创建控制台应用程序和创建您认为合适的窗口会更容易一些。在这种情况下,您所要做的就是像通常编写窗口程序一样编写代码,但不要将WinMain 命名为您的入口函数main。基于此,链接器将自动在可执行文件中设置“控制台”标志,Windows 将在启动时为其提供一个控制台。这里最大的优势是 C++ 标准库会自动初始化,因此 cin 之类的东西都可以正常工作,而无需您付出任何额外的努力。如果您从 Windowed 程序开始并分配一个控制台,那么默认情况下所有可以工作的将是 Windows API 函数(ReadConsoleInput、WriteConsoleOutput、ReadFile、WriteFile 等)您可以 让 C 和 C++ 函数工作,但您必须处理一些记录不充分的领域(这些领域都可以随着编译器的下一个版本进行更改)才能实现。我一般会避免这种情况,除非我只想使用 Windows API 函数来处理控制台。
【讨论】:
main 与WinMain 的评论假定使用了Microsoft 工具链。例如GNU 工具链对这两个中的任何一个都很满意,并且不使用 C++ statup 函数作为有关子系统的提示。默认情况下,MS 工具链就是这样。但即使使用 MS 的工具链,您也可以通过指定(机器代码级别)入口点,将 4 个 MS 启动功能中的任何一个用于任何 Windows 子系统。请不要在这里教人们WinMain 有任何实际用途,除了避免使用 MS 工具链输入一些构建命令或项目配置。其余的答案非常好,一如既往。 :-)
WinMain 或main 的存在推断应用程序的类型。在 Visual C++ 中有一个 Linker->System->SubSystem 标志:Windows 或 Console(/SUBSYSTEM 链接器选项)
main、WinMain 或 DllMain(或wmain 等)您可以使用开关来覆盖它,或者如果您不使用上述任何一种,则可以指定子系统。
如果您使用的是 Visual Studio,以下是一种更简单的方法,可能对您很有效:
如果是,您可以通过创建表单项目、添加必要的表单、然后更改应用程序类型(通过右键单击项目并选择属性)并将其更改为控制台应用程序来启动表单应用程序。它仍会像您期望的那样生成表单窗口,但也会启动一个控制台窗口(仍将由 cout 等填充...)!
【讨论】: