在C++中创建 WinAPI GUI 应用的现代本机方式
Modern, native way of creating WinAPI GUI apps in C++
首先,我知道这是一个常见的问题,但我找不到我正在寻找的确切答案。
我使用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设计器。
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 使用本机 C++ 应用程序中的 C# 代码
- 在nodejs中使用本机代码的最佳方法是什么?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在自定义程序中使用本机 Windows 自然顺序排序
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- MS 本机单元测试 - 断言::线程失败不起作用
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- C++/CLI 混合托管/本机 DLL 不起作用
- 从Unity3d调用本机DLL的最佳方式是什么
- 如何使用本机代码以编程方式查找Java本地变量的内存地址
- 在C++中创建 WinAPI GUI 应用的现代本机方式
- 使用本机C++以编程方式连接到OpenVPN