【问题标题】:How do I create a GUI for a windows application using C++?如何使用 C++ 为 Windows 应用程序创建 GUI?
【发布时间】:2010-10-04 01:57:57
【问题描述】:

我正在决定如何为小型 c++/win32 api 项目(使用 Visual Studio C++ 2008)开发 GUI。该项目只需要几个组件来启动主流程,因此它的重量非常轻(几乎只有 1 个按钮和一个文本框......)。我的问题是这样的:

我没有在 Windows 上开发 GUI 的经验,但我可以轻松学习。那么,我应该使用什么?一个可视化编辑器(拖放代码生成g:到目前为止我对桌面 GUI 设计的偏好(java/swing))。还是我应该使用特定的库?无论哪种方式,我应该使用哪个库或可视化编辑器?我听说有人提到用 C# 编写 GUI,然后调用 C++ 代码......问题是,这是一个如此简单的 GUI,我会发现将其全部保存在 C++ 中会更容易,但我对任何事情都持开放态度最好的建议是。

【问题讨论】:

标签: c++ visual-studio user-interface winapi


【解决方案1】:

目前为止最好的 C++ GUI 库是 Qt,它全面、易于学习、速度非常快且多平台。

啊,它最近获得了 LGPL 许可证,所以现在你可以免费下载它并包含在商业程序中

【讨论】:

  • v4.5 将获得 LGPL 许可,但尚未发布。
  • QT 的主要好处是它是跨平台的。你可能认为你现在不需要它,但是等到几年后你想要移植......如果你已经使用 QT,你会笑的。
  • 仅仅因为您可能想在几年内在多个平台上运行而编写跨平台代码是一个糟糕的理由。为多个平台编写代码会产生巨大的开发开销,除非您有非常好的业务案例,否则您不应该这样做。
  • @17 of 26:如果在框架中为您完成了额外的工作,则不会。
  • Qt 可能是您在 Windows 中找到的最差 UI 框架。它的文档记录很差,支持很差(即使您有商业支持合同),并且通常会产生低于标准的用户界面,而且投资相当大。不要使用 Qt,除非你绝对,肯定必须。仅对于 Windows,您将使用 MFC、WTL、ATL 或 wxWidgets 生成更高质量的 UI,所有这些都包装了本机控件实现(与 Qt 不同,它自己滚动,并且几乎到处都会出错)。
【解决方案2】:

我在小型项目中使用过 wxWidgets,我很喜欢它。 Qt 是另一个不错的选择,但对于商业用途,您可能需要购买许可证。 如果您使用 C++ 编写,请不要使用 Win32 API,因为您最终会使其面向对象。这并不容易且耗时。此外,Win32 API 有太多的宏,感觉它提供的东西过于复杂。

【讨论】:

    【解决方案3】:

    避免 QT(对于新手)或任何无用的库(对于这样的基本事物来说是荒谬的)

    只需使用 VS Win32 api 向导,添加按钮和文本框...仅此而已!

    25 秒后!

    【讨论】:

    • 在哪里可以找到这个 win32 api 向导?
    • @Zombies,还有Raymond Chen。
    • QT 不仅适用于新手,也不适用于 C++
    【解决方案4】:

    带有一些文本和按钮的简单“窗口”只是一个消息框。您可以使用单个函数调用来创建它们;你不需要任何库。

    【讨论】:

      【解决方案5】:

      我强烈建议不要使用普通的 Win32,因为很难让它在所有情况下都能正常工作,这是相当乏味和乏味的工作,而且通用控件库也不那么完整。此外,大部分工作已为您完成。

      每次我最终完成简单的 Win32 时,我都必须花费至少几个小时来完成最琐碎的任务,因为我必须查找所有参数、标志、函数、宏并弄清楚如何正确连接它们.我通常更喜欢简单的拖放式解决方案,不要让我使用我的大脑类型,然后在 2 分钟内将东西拼凑在一起。

      作为一个轻量级的工具包,我推荐omgui,它有一个干净漂亮的API。但是,它不附带任何工具。

      如果您需要工具支持,您可能最终会选择 MFC(Visual Studio 中内置的资源编辑器)或 Qt。我不知道 wxWidgets 是否有任何工具,但我想应该有。

      编辑: David Citron 提到,显然 Visual Studio 中的资源编辑器会生成与 Win32 兼容的资源文件,因此如果您想保持简单,这可能是首选方式。

      【讨论】:

      • VS内置的资源编辑器生成与普通Win32兼容的资源。
      • 有吗?现在你告诉我:-/,这可能会挽救我几年的生命。
      【解决方案6】:

      我更喜欢简单地使用 Microsoft Visual Studio 并编写本机 Win32 应用程序。

      对于像您描述的那样简单的 GUI,您可以简单地创建一个 Dialog Box 并将其用作您的主应用程序窗口。 Visual Studio 中由 Win32 项目向导创建的默认应用程序实际上会弹出一个窗口,因此您可以使用 Dialog Box replace 该窗口并将 WndProc 替换为类似(但更简单)的 DialogProc

      那么,问题是工具和成本之一。 Visual C++ 的Express Edition 可以做任何你想做的事情,除了实际创建对话框模板资源。为此,您可以在RC file by handin memory by hand 中对其进行编码。相关 SO 问题:Windows API Dialogs without using resource files

      或者您可以尝试其他人推荐的free resource editors 之一。

      最后,Visual Studio 2008 Standard Edition 是一个更昂贵的选项,但为您提供了一个集成的资源编辑器。

      【讨论】:

      • 从 Visual Studio 2015 开始,Microsoft 现在提供 Community Editions,作为 Express Editions 的后续版本。社区版可在非企业环境中免费用于私人和商业项目。它们包含与 Professional Editions 相同的功能,包括图形资源编辑器(以及安装插件的能力)。
      【解决方案7】:

      如果你想了解win32,WTLhttp://wtl.sourceforge.net/是相当轻量级的MFC,但你必须喜欢模板才能使用它。

      如果你想要一些简单的 MFC 已经与 VS 集成,它也有大量的额外代码和网络中已知错误的解决方法。

      Qt 也是一个非常棒的框架,它有一套很好的工具、对话框编辑器、主题和许多其他东西,而且你的应用程序将准备好跨平台,尽管它需要一些时间来适应。

      你也有Gtk、wxWindow,如果你已经在linux上用过就没有问题了。

      【讨论】:

        【解决方案8】:

        对于这样一个简单的应用程序,即使是 MFC 也将是矫枉过正。如果不想引入另一个依赖项,只需在普通的 Win32 中执行即可。如果您从未使用过 MFC,这对您来说会更容易。

        查看 Charles Petzold 的经典“Programming Windows”或一些在线教程(例如http://www.winprog.org/tutorial/),您就可以开始了。

        【讨论】:

          【解决方案9】:

          只需创建一个新的 MFC C++ 应用程序。它是内置的,非常简单,世界上存在数千个示例......

          另外,您可以直接在 Visual Studio 中设计您的对话框,为它们指定变量名称,然后为您生成 90% 的代码。

          【讨论】:

            【解决方案10】:

            诺基亚的 Qt 绝对是必经之路。另一种选择是 gtk,但 Qt 得到了更好的支持和记录。无论哪种方式,它们都是免费的。并且它们都被广泛使用并且众所周知,因此很容易找到问题的答案。

            【讨论】:

              【解决方案11】:

              如果您正在做一个非常简单的 GUI,并且您已经在使用 Visual Studio,那么只使用 MFC 可能是有意义的。您只需使用 Visual Studio MFC 向导创建一个基于对话框的应用程序,在其上放置两个控件即可。

              MFC 已经过时并且有相当多的烦恼,但如果您只是在谈论一个按钮和一个文本框,它肯定会为您完成这项工作。

              我对 Qt 没有任何经验,所以无法比较两者。

              【讨论】:

                猜你喜欢
                • 2012-11-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-04-24
                • 1970-01-01
                相关资源
                最近更新 更多