C++ 类似于 WPF 的替代方案

17

最近我尝试了一些WPF的内容,我必须说我真的很喜欢这个想法。我喜欢整个框架,从GUI到基础设施。

然而,尽管我喜欢managed land,但我同样喜欢我的native code。所以我想知道是否存在适用于C++的库,能够捕获WPF的不同部分的本质。我不是在寻找interop解决方案,也不想要Managed C++或C++/CLI解决方案,而是纯C++解决方案。

现在,我并不指望能找到一个“复制品”来实现WPF在C++中的功能-我不指望它存在,也不需要它存在。相反,我期望不同的库可能会捕获所需概念的子集。我的特定兴趣点是:

  1. 通过DirectX或OpenGL(最好是后者)进行小部件化GUI的硬件加速图形

  2. GUI设计的声明性语言(最好是XML方言)

  3. 数据绑定

  4. 分辨率独立性(不太重要)

稍微说一下我的理由,我想自己实现这样的库,以捕获我已经开始梳理的特定模型。在锁定我的设计之前,我正在寻找一些更多的灵感和有用的资源。该库旨在跨平台,因此对跨平台思想的参考非常有帮助,但并不是必须的,因为我通常能够将这些内容转化为跨平台解决方案。

最后,虽然我正在编写一个C++库,但我也接受来自任何native语言的想法。

提前感谢您的任何帮助。

2个回答

10
  1. 目前没有任何类似的解决方案,至少跨平台方面是这样。Direct2D效果还算不错,但显然只能在Windows上使用。NVIDIA最近放弃了OpenGL的"路径"扩展,虽然在基本功能上类似,但它只能在NVIDIA的设备上使用(而且不支持Mac OSX)。Cairo有一个OpenGL后端,但我不知道它的性能如何。如果Mozilla在Windows上选择了D2D,则Cairo肯定做得不好。
  2. 许多GUI工具包都有一些用于制作GUI的语言。Qt有一个预编译成C++的语言。
  3. 据我所知,没有。数据绑定需要某种反射形式(WPF风格的数据绑定就需要),而C++没有原生支持反射。因此,您需要在开始使用WPF风格的数据绑定之前实现某种形式的反射。
  4. 这与#1有关。基本上,任何基于GPU的渲染器都可以以任意分辨率运行。

我喜欢C ++,但老实说,这种东西最好用高级语言实现。缺乏基于语言的反射支持将使实现数据绑定变得非常麻烦。相反,您可以在C++中实现低级别的“将东西渲染到区域”和基本的窗口/事件管理,然后将其公开到脚本语言中,以在其中处理GUI及其相关数据的数据绑定。这样,您可以在需要时使用本地代码速度,但具有脚本语言的多功能性和反射来处理GUI及其相关数据。


3
感谢您的解释,我非常感激有关何时/何处在特定环境中使用C ++的提示。虽然我认为这些建议非常有价值,但我主要感兴趣的一个领域是找到在C ++中执行通常归因于高级语言的任务的方法。也许这样做会很奇怪、困难或不可能,但我仍然会尝试实现我的想法。哦,至于第4点,您是正确的,但前提是呈现表面正确调整大小。是否有任何跨平台工具可以访问DPI设置以计算窗口大小? - Ken Wayne VanderLinde

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接