35

我需要编写一个应用程序,该应用程序在视觉上与为 Windows XP/Vista/7原生编写的东西没有区别,使用的是最现代的 Visual Studio 默认提供的任何东西。但我正在使用 MinGW 和 Vim(在 C++ 中)进行开发。

特别是,我希望在以上三个版本的 Windows 上原生以下控件:表单镶边、按钮、复选框、菜单、组合框、进度条、滚动条、富文本框。这对我来说就足够了。

我知道如果您riched32.dll根据需要加载 GdiPlus 和其他类似的东西,并使用 Windows API 来实例化控件,那么操作系统将替换其版本的 GdiPlus 或其他库,因此它看起来像 XP 上的 XP 样式控件,Vista 上的 Vista,等等

但我不想使用普通的 Windows API,因为即使检索默认字体也需要半页代码,以及我想做的类似故事。所以我想使用一个工具包。

wxWidgets、Qt、GTK+、FLTK似乎是使用最广泛的。但它们都是跨平台的。我使用过跨平台的应用程序,其中许多都有外来的 GUI 控件(我称它们为小部件)。所以我的问题是:这些工具包中的哪些可以用来生成上面列出的真正的原生 UI 控件,并在上面列出的三个版本的 MSWin 上正确显示?

我已经在 Google 图片中输入了每个 +“windows”,但很难说,除了 FLTK 可能做不到。你们中的许多人一定知道答案在你的脑海中......

4

4 回答 4

31

我不会谈论 FLTK,因为我不知道。

  • wxWidgets 使用平台的原生工具包(Linux 上的 GTK,Windows 上的 Win32 GUI API,MacOS X 上的 Cocoa)。
  • GTK 使用主题 API 来伪造平台的外观和感觉(GTK2 上的自定义主题引擎,GTK3 上基于 CSS 的引擎)。
  • Qt 使用样式来伪造平台的外观和感觉。

根据我自己的经验,wxWidgets API 非常难看,因为它有太多的方法只能在一个或另一个平台上使用,除非你想办法解决它,否则它会使东西变得不可移植。与 GTK+ 和 Qt 不同,它还在它用作后端的工具包之上添加了自己的错误层。但是,由于它使用本机工具包,它努力使平台具有本机外观。

GTK+ 3 在 Windows 上仍有一些粗糙的边缘,它从 GTK+ 3.6 开始正式支持。GTK+ 项目将Windows 二进制文件的分发委托给MSYS2项目。由于您已经在使用 MinGW,这几乎是相同的环境。他们与 GTKmm 有很好的 C++ 绑定。但是,您可能需要做一些工作才能使主题适合您的 Windows 版本。

Qt 是跨平台 C++ 开发的不错选择,主要目标是 Windows,它试图模仿平台的原生外观,但也有其自身的主题限制。

总结一下,只有两种方法:

  • 提供自己的小部件并通过提供主题(GTK+ 和 Qt)尝试看起来像本机平台的工具包
  • 使用本机小部件但将其 API 隐藏在抽象层 (wxWidgets) 后面的工具包

两者都有其优点和缺点。

于 2013-09-25T08:26:12.353 回答
28

抛开实现细节不谈,wxWidgets 的理念是,并且一直是,尽可能地看起来原生。我们,wxWidgets 开发人员,并不总是能够实现与原生应用程序没有区别的目标,但我们总是努力做到这一点。AFAIK 这不是 Qt 的重要目标,也绝对不是 GTK+ 的目标,因此在我(显然有偏见)看来,如果您认真为用户提供最佳体验,尤其是在 OS X 下,wxWidgets 是您的最佳选择。

为了更准确地回答您的问题,您上面列出的所有内容都是使用 wxWidgets for Windows 中的本机控件实现的(尽管富文本控件在其他平台下本机不可用)。

于 2013-09-29T10:52:31.567 回答
5

IUP - 便携式用户界面库使用原生小部件、C API 和 Lua 绑定。

于 2015-05-10T21:14:23.437 回答
1

我在不更改代码的情况下将 java 用于本机跨平台,如果您想要提高性能和独立可执行文件,我将 c/c++ wxwidgets 用于专门的跨平台,将 c/c++ winapi 用于 windows,x11 用于 gnu linux 本机平台和终端控制台,如果您希望您的软件快速更新,则将 python 用于脚本控制台和平台,并将程序集用于一个简单的纯控制台。有时我将它们与 Windows 上的共享库 .dll 和 gnu linux 上的 .so 结合起来。而且我喜欢在硬件要求较小的编程研究中进行比较性能。

于 2017-01-25T02:56:52.510 回答