【问题标题】:Console+Windows' form控制台+Windows的形式
【发布时间】:2011-02-12 14:17:47
【问题描述】:

是否有从控制台应用程序创建子窗口的 winAPI 函数(无类)。需要在窗口上打印图形,向控制台输入命令。

谢谢。

【问题讨论】:

    标签: c++ windows forms console


    【解决方案1】:

    为您的 GUI 应用程序创建控制台窗口更简单。 Have a look here

    【讨论】:

      【解决方案2】:

      我不确定您是否指的是“女儿”的具体含义,但控制台应用程序当然可以创建一个窗口(或任意数量)。窗口应用程序也可以分配控制台。

      从窗口程序分配控制台理论上有点工作,但确实有一个优点:您可以使用您选择的应用程序框架(Qt、wxWidgets 等)编写大部分窗口“东西”

      如果您直接使用 Windows API,创建控制台应用程序和创建您认为合适的窗口会更容易一些。在这种情况下,您所要做的就是像通常编写窗口程序一样编写代码,但不要将WinMain 命名为您的入口函数main。基于此,链接器将自动在可执行文件中设置“控制台”标志,Windows 将在启动时为其提供一个控制台。这里最大的优势是 C++ 标准库会自动初始化,因此 cin 之类的东西都可以正常工作,而无需您付出任何额外的努力。如果您从 Windowed 程序开始并分配一个控制台,那么默认情况下所有可以工作的将是 Windows API 函数(ReadConsoleInputWriteConsoleOutputReadFileWriteFile 等)您可以 让 C 和 C++ 函数工作,但您必须处理一些记录不充分的领域(这些领域都可以随着编译器的下一个版本进行更改)才能实现。我一般会避免这种情况,除非我只想使用 Windows API 函数来处理控制台。

      【讨论】:

      • @Jerry:您对mainWinMain 的评论假定使用了Microsoft 工具链。例如GNU 工具链对这两个中的任何一个都很满意,并且不使用 C++ statup 函数作为有关子系统的提示。默认情况下,MS 工具链就是这样。但即使使用 MS 的工具链,您也可以通过指定(机器代码级别)入口点,将 4 个 MS 启动功能中的任何一个用于任何 Windows 子系统。请不要在这里教人们WinMain 有任何实际用途,除了避免使用 MS 工具链输入一些构建命令或项目配置。其余的答案非常好,一如既往。 :-)
      • @Alf:我想过,但基于“form”标签,认为 MS 工具链是一个合理的简化假设。你很可能是对的,尽管我对那个分数的判断并不完美。否则,谢谢您的好意。
      • 感谢您的回答。我是这样做的。如何向蠕虫发送消息以输出图形 - 例如,我尝试 SendMessage(Hwnd,WM_DESTROY,0,0),但没有任何效果。
      • linked 不会根据WinMainmain 的存在推断应用程序的类型。在 Visual C++ 中有一个 Linker->System->SubSystem 标志:WindowsConsole/SUBSYSTEM 链接器选项)
      • @Andy T:MS 的链接器有一个开关,但它也(尝试)根据 mainWinMainDllMain(或wmain 等)您可以使用开关来覆盖它,或者如果您不使用上述任何一种,则可以指定子系统。
      【解决方案3】:

      如果您使用的是 Visual Studio,以下是一种更简单的方法,可能对您很有效:

      如果是,您可以通过创建表单项目、添加必要的表单、然后更改应用程序类型(通过右键单击项目并选择属性)并将其更改为控制台应用程序来启动表单应用程序。它仍会像您期望的那样生成表单窗口,但也会启动一个控制台窗口(仍将由 cout 等填充...)!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 2011-03-31
        • 2016-12-13
        • 2018-08-13
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        相关资源
        最近更新 更多