GDI ......还是C ++的等价物?

时间:2015-07-24 01:25:52

标签: c++ winforms gdi+ gdi

我让自己感到困惑,所以我觉得这是一个提出这个问题的好地方。

如果我想在C ++中编写自己的自定义控件(完全自定义绘制),我还有什么GDI / GDI +的替代品?

我已经使用GDI在VB和C#中做了一段时间,但我想从C ++开始。

我不想使用任何第三方的东西,而是坚持原生。我猜你可以说的那种应用程序就像WinForms应用程序/基于GUI一样。

但我不想用C ++创建WinForms应用程序。

我应该在C ++中使用Direct2D进行UI绘图吗?或者C ++有GDI吗?我该怎么用?

我将要创建的控件类型是:

TextBox,ListView,Switch Control,Progress Indicator ......基本上我将从头开始重写C ++中用C#创建的所有控件。

2 个答案:

答案 0 :(得分:1)

看看Irrlicht:http://irrlicht.sourceforge.net/

它在技术上是一个游戏引擎,但我在许多项目中使用它来进行简单的2D UI绘图。学习曲线也非常温和。

无论如何,它拥有您所询问的所有控件,但如果您愿意,可以让您自己编写。

答案 1 :(得分:1)

  

前段时间我被告知GDI是C#的东西

嗯不, GDI早于.NET ,是c / c ++和兼容语言的默认选择。它至少可以追溯到Windows 3天(我没有任何经验,所以我无法发表评论)。

  

Microsoft Windows图形设备界面(GDI)使应用程序能够在视频显示器和打印机上使用图形和格式化文本。基于Windows的应用程序不直接访问图形硬件。相反,GDI代表应用程序与设备驱动程序进行交互 - More...

GDI +是“基于类的C / C ++程序员API”

  

Windows GDI +是一个基于类的C / C ++程序员API。它使应用程序能够在视频显示器和打印机上使用图形和格式化文本。基于Microsoft Win32 API的应用程序不直接访问图形硬件。相反,GDI +代表应用程序与设备驱动程序交互。 Microsoft Win64也支持GDI +。 More...

OP:

  

我想在C ++中编写自己的自定义控件(完全自定义绘制)?

好问题。由于您希望使用c ++创建它们并执行完全自定义绘制,因此您有几个选项。

子类

这是一种非常古老的技术,我不确定是否有人会烦恼。这是我们在OLE / ActiveX控件出现之前所做的事情。我们的想法是已经存在一个控件,并且在运行时你子类,这样你就可以有效地接管控件的外观。缺点是容器完成了大部分工作,并且它们实际上并不是可重复使用的。

ActiveX控件

最初是OLE COM控件; ActiveX大约在1995年左右出现,并且需要使OLE控件更小,以便更快地加载网页。它们本质上是OLE控件,但删除了许多不需要的COM接口,这些都不是网页真正需要的。

ActiveX控件,是COM;与子类化不同,它们是语言中立的,真正可重用。您可以将ActiveX嵌入到支持COM的容器中,无论它们是否为c ++;德尔福;视觉对象; VB;访问; web甚至.NET WinForms。

自定义绘制

ActiveX的真正优点在于,您可以创建复合控件(包含其他标准Windows控件的控件)或空白完全可渲染控件,您可以使用GDI / GDI +(或任何可以渲染到GDI上下文的控件) )让你创造一个真正的美丽;定制控制。

曾见过那些漂亮的图表吗?它们可能是ActiveX。

查看Microsoft ATL c ++类库。它有一些很棒的骨架来创建COM ActiveX控件和容器。 WTL也是一个很好的通用库,如果内存服务,MS将发布到公共域。

的Direct2D

  

我应该在C ++中使用Direct2D进行UI绘图吗?或者C ++有GDI吗?我该怎么用?

除非您特别需要硬件加速,否则使用Direct2D会将您带到某个您可能不需要的路径 - 例如在您的应用中,在支持Direct2D的计算机上设置Direct2D环境。但是,如果您对here is a nice article on D2D-GDI interop

感兴趣

我坚持使用GDI / GDI +。