ClipRectangle表示剪切矩形,一般情況下,控件 重新繪制內容時是不需要重寫所有的內容,而是繪制一部分內容,該參數就指明控件中那個 部分是需要重新繪制的,該區域以外的界面是不需要繪制,因此該參數是優化圖形界面軟件 性能的基礎,在這裡,由於橢圓形按鈕繪制的內容少,界面結構簡單,因此不需要優化,不 需要使用ClipRectangle參數。
我們重寫的OnPaint函數代碼如下
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
// 創建橢圓路徑
using( System.Drawing.Drawing2D.GraphicsPath path =
new System.Drawing.Drawing2D.GraphicsPath())
{
path.AddEllipse( 0 , 0 , this.ClientSize.Width -1 , this.ClIEntSize.Height -1 );
// 填充背景色
using( SolidBrush b = new SolidBrush(
bolMouseHoverFlag ? this.HoverBackColor : this.ButtonBackColor ))
{
e.Graphics.FillPath( b , path );
}
// 繪制邊框
using( Pen p = new Pen(
bolMouseHoverFlag ? this.HoverBorderColor : this.BorderColor , 2 ))
{
e.Graphics.DrawPath( p , path );
}
}
if( this.Caption != null )
{
// 繪制文本
using( StringFormat f = new StringFormat())
{
// 水平居中對齊
f.Alignment = System.Drawing.StringAlignment.Center ;
// 垂直居中對齊
f.LineAlignment = System.Drawing.StringAlignment.Center ;
// 設置為單行文本
f.FormatFlags = System.Drawing.StringFormatFlags.NoWrap ;
// 繪制文本
using( SolidBrush b = new SolidBrush( this.ForeColor ))
{
e.Graphics.DrawString (
this.Caption ,
this.Font ,
b ,
new System.Drawing.RectangleF (
0 ,
0 ,
this.ClIEntSize.Width ,
this.ClIEntSize.Height ) ,
f );
}
}
}
}//protected override void OnPaint(PaintEventArgs e)