利用.NET绘图技术制作水晶按钮控件
UI(User Interface)编程在整个项目开发过程中是个颇为重要的环节,任何好的解决方案若没有良好的用户界面呈现给最终用户,那么就算包含了最先进的技术也不能算是好程序。UI编程体现在两个方面,一是设计精美的用户界面,再有就是符合大多数用户习惯和易于使用的操作流程,而制作出精美的、绚丽多彩的用户界面是博得最终用户喜爱的第一步。我们就以制作一个水晶样式的三维按钮为例来丰富.Net界面素材库,为Windows 窗体程序增加亮点。
一、 技术要点
不可否认的是,Windows编程已经进入.Net时代,虽然现在的编程平台仍然是多家并存,但是微软的.Net框架类库已经全面占据了主流地位。.Net框架为我们提供了非常丰富的类、函数和方法,从桌面到Web它可以触及到编程的任何领域,以至于可以完全放弃Win32 API 的手工调用,因为.Net框架已经为我们准备好了一切。尤其是GDI+的发布,Win32程序员都应该非常清楚,在VC6和Delphi5、6、7下要想绘制不规则图形、设计独特样式的窗口控件是件多么不轻松的事情,我们需要返回当前设备指针,然后坐标映射,再调用标准的Win32 GDI函数来进行绘制操作,最后还得记着释放设备指针等一系列内存清理操作,现在有了.Net类库,我们只需在控件的OnPaint事件中通过e.Graphics返回Graphics对象,然后创建一个自定义的刷子对象Brush来填充Graphics表面,再创建一个Region对象设计好我们需要的控件轮廓,并将其赋给控件的Region属性,在这个过程中可以使用GDI+为我们提供的丰富的类和方法来设计美轮美奂的控件外观,这样一个全新的控件就创建完成了。
我们的示例控件是一个水晶样式的三维按钮,设计这样一个按钮控件其实并不复杂,我们只需要捕获OnPaint事件,并在事件中按照不同的按钮状态譬如:鼠标进入、鼠标悬停、鼠标单击以及鼠标离开等重新绘制按钮的外观。按钮的三维样式实际上就是三个矩形区域的叠加,即阴影位于最底层、按钮本身以及最顶层的按钮头部白色泡泡部分,这三部分有效的叠加就制作成了一个惟妙惟肖的水晶样式的按钮了,如下图所示:
三个Brush对象的实例br1、br2和br3创建完成后,我们需要按照阴影、按钮本身,最后是按钮顶部的白色渐变部分这样的顺序来绘制它们。调用Graphics对象的FillPath方法分别使用三种不同的Brush对象来填充 GraphicsPath 的内部,这样具备水晶样式的三维按钮就基本创建完成了。最后,我们再利用.Net二级缓存绘图技术将按钮以及按钮上所显示的文字绘制到屏幕上。