在C++中创建 WinAPI GUI 应用的现代本机方式

Modern, native way of creating WinAPI GUI apps in C++

本文关键字:本机 方式 应用 GUI C++ 创建 WinAPI      更新时间:2023-10-16

首先,我知道这是一个常见的问题,但我找不到我正在寻找的确切答案。

我使用Swing在Java中做过很多项目。从编写 GUI 开始,然后转到 GUI 设计器。事实证明,这是构建 GUI 应用程序的一种非常快速简便的方法。

但是现在,我需要搬到C++。我正在开始一个使用大量硬件资源(DirectX,OpenCV等(的项目。我知道有用于这些技术的Java库。但是,考虑到该项目的内部结构,C++绝对是正确的方法。

我从MCU编程中了解C和C++语言。另外,我读过很多关于本机WinAPI编程,Windows内部等的文章。我想我有足够的知识开始。我不想太担心 GUI 设计,但它必须看起来合适。

我知道有几个基本选项:纯WinAPI,MFC,WTL,Qt...如果有某种 GUI 设计器工具,我会很高兴,但根据我的研究,没有。有一个 MFC 向导,它有助于创建基本窗口,但它不是设计器。我发现的最接近的东西是Qt。但从我读到的内容来看,它没有使用 WinAPI 进行绘图,因为在未来,Qt 编写的应用程序的外观和感觉可能与本机 Windows 外观不同。

因此,总而言之,如果您对使用 GUI 创建本机 Windows C++ 应用程序有经验,您会向我推荐什么?具体来说,我错过了什么工具或设计器吗?

(我使用的是Visual Studio 2010专业版,因为多亏了DreamSpark项目,我免费获得了它(

我最近使用了Qt4,对API非常满意。我发现它很简单,有据可查,代码非常简洁。

Qt在模拟目标操作系统的外观和感觉方面做得非常好(正如@In计算机在评论中指出的那样,Qt实际上自己绘制了所有内容,并且不使用本机组件(无论如何,这可以手动或通过其IDE,Qt Creator中的GUI编辑器直观地编码。如果你走这条路,我建议在那里创建你的初始GUI项目(.pro文件(,然后通过Qt Visual Studio插件将其导入Visual Studio。

Qt的事件/消息传递系统插槽和信号也值得一提。是的,它对GUI编程至关重要,但在较低级别的代码中也可能非常有用。

我希望Qt在你的项目中能很好地工作,但和往常一样,创建一些简单的测试,以确保这些技术能够协同工作。

这里有

一些提示:

  • 不要把自己锁在C++里。C#和Java(例如(可以很容易地与C/C++互操作。(前者通过 PInvoke 或 C++/CLI,后者通过 JNI(。C++可能不是快速编写 GUI 的理想语言。

  • 您对"本机窗口外观"的要求是任意的,您应该考虑一下。这真的是你需要的吗?

  • 温格斯。这是一项较旧的技术,但仍然被广泛使用。您可以使用 C++/CLI 或 C#(或任何 .NET(语言中的 API。

  • WPF,一个较新的API,但从C++处理起来会更难(使用C#或VB更好(

  • 市场上众多具有C或C++API的GUI工具包之一(QT,GTK,wxWidgets,VCL,...在此处列出(。有些有"本地"外观,有些没有。有些有设计师,有些没有。有些是免费的,有些不是。

如果您需要简单的用户界面,我建议使用 WTL - 简单、轻量级、仅标头库,WinAPI 上的包装器非常好。在Visual Studio中,您可以使用表单设计器来创建窗口,并使用WTL类来实现与用户的交互。WTL的文档很差,但WTL看起来像MFC。

如果你想要丰富的可能性,我建议使用Qt。这是一个非常强大的GUI框架,具有强大的社区。

您可以使用

C++Builder XE2(Rad Studio IDE的一部分(,其中包括VCL(可视化组件库(,VCL是Windows控件(还包括自定义控件(的包装器,可提高开发效率。

wxWidgets c++ 类库附带了一个屏幕生成器。

VCL是一个很好的方法。它有一个GUI设计器工具(Embarcadero Rad Studio XE6(完全原生的GUI开发人员,用于C++和Delphi

根据定义的严格程度,您可以使用 .NET Windows 窗体或 Windows Presentation Foundation 并从 C++、C++/CLI 和 C# 插入逻辑。这不是一个纯粹的C++解决办法。事实上,我甚至不一定建议在这种情况下使用C++。简单地使用 C# 会更直观且易于维护。WinForms和WPF有非常棒的GUI设计器。