【问题标题】:How do I create a non managed Windows GUI in Visual C++?如何在 Visual C++ 中创建非托管 Windows GUI?
【发布时间】:2010-02-01 22:59:30
【问题描述】:

当我创建一个“Windows 窗体应用程序”时,生成的程序是一个托管程序。创建一个“Win32 应用程序”会生成一个本地应用程序,但是当我尝试添加一个表单时,我被告知如果我继续,该项目将转换为 CLI。如何使用 Visual C++ 2008 Express Edition 设计本​​机 Windows GUI?我可能在这里很傻,但我就是想不通。

【问题讨论】:

  • 您如何尝试“添加表单”?

标签: c++ user-interface visual-c++ native managed


【解决方案1】:

使用 MFC、WTL 或直接的 Win32 API。如果不切换到托管代码,就无法使用表单(或任何 .NET)。

【讨论】:

  • 添加到答案 - CreateWindow 和 DialogBox 类型的函数可能需要一个对话框模板资源。您可以使用资源编辑器添加新的并使用图形窗口编辑器进行编辑。
  • XAML 怎么样?在这个问题和其他类似问题中都没有提到它的任何具体原因?
【解决方案2】:

您只需要避免使用托管库。这很可能意味着将MFC 用于GUI,而不是Windows 窗体。详情请见MSDN's MFC pages

不幸的是,VC++ Express Edition 不直接支持 MFC,因此您将受到更多限制。 compile MFC projects 使用 Express Edition 是可能的,但是你失去了所有的向导等。如果你认真做非托管 GUI 开发,你应该考虑升级到更高级别的 SKU。


另一种选择是将Qt 用于GUI。它现在是 LGPL,可以免费使用,甚至可以在商业 C++ 项目中使用,并且包括一个完整的设计器。

【讨论】:

  • 谢谢,MFC 不包含在 Express 中。我想我可以只使用 wxWidgets 之类的,但这不是很“直观”。
  • 它可能不直观,Reed 确实告诉你如何使用 VS 2005 Express 编写 GUI C++ 应用程序。
  • @Dataflashsabot:那么我建议考虑 Qt。它非常适合制作原生 C++ GUI,并且确实包含设计器。我编辑了我的答案以反映此选项,并包含一个链接
【解决方案3】:

这是对链接问题的回答。不幸的是,罗伯特哈维已经关闭了它,因为他认为它是重复的。不是,抱歉,鲍勃。

创建 xll 的最佳库是 http://xll.codeplex.com。您可以使用它来使用 Excel 宏创建基本的用户界面。可以在xll/error.cpp 中的 ALERT.FILTER 宏中找到其中一个示例

【讨论】:

  • 支持只是因为我非常讨厌模组盲目地做这样的事情。我个人最喜欢的是当我的答案与另一个被错误地判断为“完全重复”的问题合并时,因为离题而投了反对票(提示:如果任何答案神奇地变得离题,则该问题不是重复的,不不管 5 个随机 SE 用户怎么想)。
  • 值得称赞的是,他们最近似乎在这方面做得更好。为什么他们不允许对他们的决定提出意见对我来说是个谜。
【解决方案4】:

作为 Reed Copsey,MFC 将是在 Windows 平台上创建本机非托管 GUI 的“默认”方式。但是,MFC 不包含在 Visual Studio Express 中。因此,您要么需要升级到完整版本,要么可以考虑使用免费提供的 C++ GUI 库,例如 wxWidgets

如果你想要一个 GUI 编辑器,还有 wxFormsBuilder

您也可以直接使用“裸机”并直接编写 Win32 API,也许可以从 common controls library 获得一些帮助。但你会进入一个痛苦的世界;)

【讨论】:

  • 啊,我明白了。我希望会有一个非 MFC 原生设计师。我会研究 wxWidgets 或 qt。感谢所有回复。
  • 一个非 MFC 原生设计师。它被称为资源编辑器。
【解决方案5】:

您需要使用本机应用程序框架。对于 Windows,这意味着 MFC 或裸 Win32 库。 WinForms 在后台使用 .NET 库,因此需要进行管理。

【讨论】:

    【解决方案6】:

    本机应用程序不使用“表单”。例如,对于本机应用程序,您可以创建 MFC 应用程序。如果您希望它类似于基于表单的应用程序,您可以告诉向导您想要一个基于对话框的应用程序,或者(在向导的最后一页上)让您的视图派生自 CFormView 而不是 CView。

    或者,您可能想要使用 WTL——尽管这意味着您基本上所有的代码都需要手动编写,而不是使用向导等。

    【讨论】:

    • Express Edition 中不存在“向导” - 不幸的是,VC++ Express 不(直接)支持 MFC(和 WTL)代码。
    • @Reed:我必须相信你的话。我曾经玩过 Express Edition,似乎记得它能够创建一个 MFC 项目,但是 1)这可能是我的记性不好,或者 2)由于我已经安装了另一个版本而引起的。我记得它只支持 DLL 中的 MFC,而不是静态链接,但这是主要限制。
    【解决方案7】:

    Windows 窗体是作为 Microsoft .NET Framework 一部分包含的图形应用程序编程接口 (API) 的名称,它通过将现有 Windows API 包装在托管代码中来提供对本机 Microsoft Windows 界面元素的访问。

    【讨论】:

      【解决方案8】:

      上面的大多数答案都很好地解释了事情 - 如果您想研究创建一个纯 Win32 Native App 表单(没有 MFC/WTL 等),请查看此处的教程:http://www.zetcode.com/tutorials/winapi/ for starters。这是我第三次在这里链接到这个网站,但他的教程非常好。

      注意 - 在这个阶段,除了结果之外没有任何“视觉”的东西 - 这一切都是在代码中完成的,尽管我不认为这真的太难了。一定会是很好的编程体验。

      【讨论】:

        【解决方案9】:

        Windows 窗体是用托管代码编写的 GUI 框架,因此您不能在本机应用程序中使用窗体。

        使用本机应用程序,您必须创建窗口。 Charles Petzold 的Programming Windows 是这方面的权威指南。与使用一个好的框架相比,这是很多工作。 MFC (Microsoft Foundation Classes) 是本机 Windows GUI 的框架。不知道是不是VC++ Express自带的。

        【讨论】:

          【解决方案10】:

          我注意到没有人提到JUCE 可用于在 C++ 中构建跨平台用户界面。我觉得这很酷。自从我使用它以来,它似乎也已扩展到支持移动设备。

          个人和教育许可是免费的。 “Pro”和“Indie”许可证相对便宜。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-13
            • 2011-02-07
            • 2013-01-05
            • 2013-01-26
            • 1970-01-01
            • 1970-01-01
            • 2010-10-25
            • 1970-01-01
            相关资源
            最近更新 更多