VC GDI+进阶1:初识GDI+

一、GDI

  GDI全称是Graphic Device Interface,即图形设备接口,是操作系统提供的位于应用程序层和不同硬件层的中间层。软件开发人员可以直接调用GDI提供的接口函数来对不同输出设备进行绘制。

二、GDI+

  GDI+是Windows对GDI的升级版本,对GDI进行了一些优化,并在此基础上增加了许多新的特性,如渐变色填充、反走样绘图等。GDI+已经出现差不多10个年头了,但目前在vc领域的开发工作中,还是有相当大一部分比例仍然在使用笨拙的GDI。

  在VC下使用的GDI+接口其实是微软提供的一套基于C++的类库,其中的类信息如下:

三、GDI+与GDI主要变化

  1、不再使用设备环境或句柄

  在使用GDI进行绘图时,必须要指定一个设备环境(DC, Device Context),用来将某个窗口或设备与设备环境类的句柄指针关联起来,所有的绘图操作都与该句柄有关。而GDI+不再使用这个设备环境或句柄,取而代之是使用Graphics对象。与设备环境相类似,Graphics对象也是将屏幕的某一个窗口与之相关联,并包含绘图操作所需要的相关属性。但是,只有这个Graphics对象与设备环境句柄还存在着联系,其余的如Pen、Brush、Image和Font等对象均不再使用设备环境。 

  2、GDI+中无“当前状态”(GDI中的有状态绘图与GDI+的无状态绘图)

  在GDI中,如要绘制一条直线,通常是类似这样的做法:

dc.Moveto(Point1);
dc.Lineto(Point2);

  即dc保存了一个“当前位置”的状态信息,另外,dc在绘图的时候,会使用“当前画笔”(dc中通过SelectObject来改变当前画笔或画刷);

  而在GDI+中,不存在这种当前位置或当前画笔的状态;在GDI+中绘制直线,直接像如下调用:

Status DrawLine(  
   const Pen *pen,
const Point &pt1,
const Point &pt2
);

  即直接指定要使用的画笔Pen和直线的起始点来绘制。GDI+的这种无状态绘图方式,可以使得程序的可读性更好。

  3、GDI+中绘制边框和填充的分离  

  在GDI中绘制一个形状时,比如一个rect,总是形状轮廓和其内部使用同一个绘制函数:GDI使用当前画笔来绘制轮廓,使用当前画刷开填充形状;而在GDI+中,已经将形状的轮廓绘制和内容填充分离开来,使得图形的绘制更加灵活。

四、GDI+中的一些新特性

  GDI+中新增了一些诸如渐变画笔、基数样条、矩阵与形状变换、alpha混合(透明处理)、多种图像格式支持等特性。这些特性使得GDI+在绘图方面比GDI更加出色,使用GDI+的这些新特性可以轻松制作出漂亮的界面。

posted @ 2011-02-13 17:56  I'm 农民工  阅读(2132)  评论(1编辑  收藏  举报