1 GDI+的核心:Graphics类
(1)The Graphics class provides methods for drawing lines, curves, figures, images, and text. A Graphics object stores attributes of the display device and attributes of the items to be drawn.【msdn】
Graphics是一个device context和你的drawing conetent之间的一个中介。它存储了device context的相关属性,以及drawing content的属性。这样,它就能用自己的方法把drawing content“映射”到device content 之上。
(2)GDI+的核心是Graphics类,包含了显示、绘图等功能。它提供了四个构造函数:
Graphics::Graphics(Image*)
Graphics::Graphics(HDC)
Graphics::Graphics(HDC,HANDLE)
Graphics::Graphics(HWND,BOOL)
构造函数1从image对象创建一个Graphics类。这种方式允许你在打开某张,或者生成某张位图之后,应用Grapgics的方法对改位图进行操作。
构造函数2从一个传统的HDC获取一个Graphics对象,把传统的在HDC完成的操作接手过来。也就是当要画直线,曲线,图形等时,采用这种构造函数。
后面两种构造函数这里不说了!
(3)如果读者有GDI编程经验的话,应该会联想起CDC::CreateCompatibleDC和CBitmap::
CreateCompatibleBitmap吧?再列举Graphics中有代表性的用于绘图的成员函数:
Graphics::DrawArc(Pen*,INT,INT,INT,INT,REAL,REAL)
Graphics::DrawBeziers(Pen*,Point*,INT)
Graphics::DrawClosedCurve(Pen*,Point*,INT)
Graphics::DrawCurve(Pen*,Point*,INT)
Graphics::DrawEllipse(Pen*,Rect&)
Graphics::DrawImage(Image*,RectF&)
Graphics::DrawLine(Pen*,Point&,Point&)
Graphics::DrawPie(Pen*,Rect&,REAL,REAL)
Graphics::DrawPolygon(Pen*,Point*,INT*)
Graphics::DrawRectangle(Pen*,Rect&)
是不是非常象CDC?从这里大家也能猜出一点Graphics类和CDC类的异同吧!简单的说,Graphics的层次更高一些,封装的更好。
2 GDI+的几个特点:
(1)传统的GDI编程最痛苦的是什么?是不停的CreateObject,SeleteObject,DeleteObject——代码繁琐,一不小心还会内存泄露……现在GDI+结束了这一切,就凭这一个理由,也足够我们转向GDI+了,呵呵。从上面的几个成员函数可以看出来,每个绘图动作都指定了画笔、刷子或者Image,完全抛弃了SelectObject的概念。
(2)GDI+里面的颜色更加丰富,全面支持32位色,从Color类的构造函数就可以看出来:
Color::Color(BYTE a, BYTE r, BYTE g, BYTE b);其中a就是透明度。
(3)GDI+里的所有函数都只接受Unicode字符串,编写代码的时候需要注意这一点。