下面几篇将要介绍如何使用Graphics Device Interface类编程。
首先解释使用GDI+进行绘图的机制,再编写几个简单的图形程序的范例。然后深入探讨GDI+的扩展功能。包括 *剪切*打印*打印预览*Drawing2D NameSpace*Imaging NameSapce
在编程术语中,当创建一个窗口,并在该窗口中进行绘图时,一般要声明一个派生与System.Windows.Forms.From的类。如果要编写一个定制控件,就要声明一个派生与System.Windows.Forms.UserControl的类。在这两种情况下都重写了虚拟函数OnPaint()。只要窗口的任何一部分需要重新绘制,Windows都会调用这个函数。其中PaintEventArgs类是一个参数。在PaintEventArgs中有两个重要的信息:Graphics对象和ClipRectangle对象。
Graphics Calss封装了一个GDI+ 绘图界面。有3种基本类型的绘图界面:*Windows和屏幕上的控件 *要发送给打印机的页面 *内存中的位图和图像 Graphics类提供了可以在这些绘图界面上会图的功能。
要获得Graphics对象有两种不同的方式:一重写OnPaint()事件,该事件是一个Form类继承Control类的虚拟方法。从该事件的PaintEventArgs中获取Graphics对象。二直接在窗口中绘图,而无需等待OnPaint()事件。在窗体上调用CreateGraphics()方法就可以获得一个Graphics对象。
在调用完Graphics对象后必须调用DIspose(),用来释放对象占用的资源。如果是从OnPaint()事件中获得的Graphics对象,而不是创建了该对象,就不用调用Dispose()。在对象超出作用域时,using结构会自动调用Dispose()。如下:
using (Graphics g = this.CreateGraphics) { g.DrawLine(Pens.Black,new Point(0,0),new Point(3,5)); }
上面的代码等价于:
Graphics g = this.CreateGraphics(); try{ g.DrawLine(Pens.Black,new Point(0,0),new Point(3,5)); } finally{ if(g!=null) ((IDisposable)g).Dispose(); }
<注:>本文参考文献
《C#入门经典》清华大学出版社