GDI+
Win Forms 全面利用了 GDI+ 这一 Microsoft 下一代的二维图形系统。Win Forms 中的图形编程模式完全是面向对象的,各式各样的画笔、笔刷、图像和其它图形对象与 .NET Framework 的其它部分一样,遵循了简单易用的指导方针。开发人员目前可以使用相当不错的一些绘图新功能,如 alpha 混色、渐变色、纹理、消除锯齿以及采用除位图外的其它图像格式。与 Windows 2000 操作系统分层和透明的窗口功能配合使用,开发人员能够毫不费力地创建丰富的、更为图形化的 Win32 应用程序。
如果触发了控件的 OnPaint 事件,能够由 PaintEventArgs 访问的 System.Drawing.Graphics 对象就成为一个 GDI+ 图形对象。图形对象能够执行的所有操作都通过 GDI+ 实施。作为一个示例,使用 GDI+ 创建一个绘制渐变背景的按钮。
以下是实现这一按钮的代码:
public class GradientButton : Button { // 保留颜色设置的成员 private Color startColor; private Color endColor; // 书写文字时我们将需要它 private static StringFormat format = new StringFormat(); public GradientButton() : base() { // 初始化颜色 startColor = SystemColors.InactiveCaption; endColor = SystemColors.ActiveCaption; format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; } /// <summary> /// 渐变色的终止颜色 // </summary> public Color EndColor { get { return this.endColor; } set { this.endColor = value; // 如有必要,则导致重新绘制 if (this.IsHandleCreated && this.Visible) { Invalidate(); } } } /// <summary> /// 渐变色的起始颜色 // </summary> public Color StartColor { get { return this.startColor; } set { this.startColor = value; // 如有必要,则导致重新绘制 if (this.IsHandleCreated && this.Visible) { Invalidate(); } } } protected override void OnPaint(PaintEventArgs pe) { // 绘制按钮的常规背景以形成 // 边框,等等 base.OnPaint(pe); Graphics g = pe.Graphics; Rectangle clientRect = this.ClientRectangle; // 缩小矩形,以免绘制时出界 clientRect.Inflate(-1,-1); // 创建渐变笔刷,从 // 左上角运行到右下角。 Brush backgroundBrush = new LinearGradientBrush( new Point(clientRect.X,clientRect.Y), new Point(clientRect.Width, clientRect.Height), startColor, endColor); // 以渐变色填充背景.... g.FillRectangle(backgroundBrush, clientRect); // 在客户机区域的中间书写文字。 g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), clientRect, format); } }
|
就像您所看到的,这并不是非常困难。得益于 Win Forms 和 GDI+ 面向对象的设计,无需编写任何复杂的代码,即可实现我们的 GradientButton,并且在设计器中,可以通过 Property Browser 操作 Text、Font、StartColor 和 EndColor。