前言
大家好,我是新閣教育韓工,前幾天在網上看到了一個比較好看的環形控件,今天我們來嘗試使用GDI+的方式來繪制一下。
創建項目
自定義控件庫其實本質上就是一個類庫,所以我們在創建項目時直接創建類庫項目。
在創建好的類庫項目中添加“用戶控件”。
實現思路
整個控件其實是由四個部分組成的。第一個部分為一個固定顔色的底圓,第二部分是一個漸變色的扇形,第三部分是一個顔色與窗體背景色相同的上圓,第四部分是顯示百分比的文字。最後将這四個部分疊加起來就得到了我們最終想要得到的控件。
實現過程1.繪制準備
在用戶控件中添加代碼,我們使用事件來繪制控件,通過參數 e 來獲取畫布。并給畫布設置一些屬性。
protectedoverridevoidOnPaint(PaintEventArgse)
{
base.OnPaint(e);
//獲取畫布
Graphicsgraphics=e.Graphics;
//消除鋸齒
graphics.SmoothingMode=SmoothingMode.AntiAlias;
//文字顯示效果
graphics.TextRenderingHint=System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
//插補模式
graphics.InterpolationMode=InterpolationMode.HighQualityBicubic;
//圖片呈現質量
graphics.CompositingQuality=CompositingQuality.HighQuality;
}
2.繪制底圓
我們在事件中繼續添加一些代碼,使用畫布的()方法繪制一個底圓,底圓的大小依照整個控件的大小創建。
//繪制底圓
SolidBrushbrush1=newSolidBrush(Color.FromArgb(93,107,153));
Rectanglerectangle1=newRectangle(1,1,this.Width-2,this.Height-2);
graphics.FillEllipse(brush1,rectangle1);
測試效果如下:
3.繪制扇形
首先創建屬性與字段,以便使用屬性來控制扇形的區域,使得扇形的區域是可變的。
//最大值
privatefloatmaxValue=100;
publicfloatMaxValue
{
get{returnmaxValue;}
set
{
maxValue=value;
this.Invalidate();
}
}
//實際值
privatefloatactureValue=60;
publicfloatActureValue
{
get{returnactureValue;}
set
{
actureValue=value;
this.Invalidate();
}
}
//文字顯示值
privatefloatPercentVal=0;
繪制扇形的大小與底圓的大小相一緻,顔色采用漸變色。
//繪制扇形
Rectanglerectangle2=newRectangle(1,1,this.Width-2,this.Height-2);
LinearGradientBrushbrush2=newLinearGradientBrush(rectangle2,Color.Blue,Color.Red,150.0f,true);
this.PercentVal=(ActureValue/MaxValue)*100;
graphics.FillPie(brush2,rectangle2,-90,(ActureValue/MaxValue)*360f);
測試效果如下:
4.繪制上圓
繪制上圓比較簡單,大小比底圓稍小,位置在整個控件中心,顔色與控件顔色相同。
//繪制上圓
SolidBrushsolidBrushElipse=newSolidBrush(this.BackColor);
Rectanglerectangle3=newRectangle(15,15,this.Width-30,this.Height-30);
graphics.FillEllipse(solidBrushElipse,rectangle3);
測試效果如下:
5.繪制文字
最後在控件的中心位置繪制文字
//繪制文字
Fontfont=newFont("華為宋體",14);
PointFpoint=newPointF(((float)this.Width)/2.0f-27,((float)this.Height)/2.0f-10);
graphics.DrawString(this.PercentVal.ToString("0.0")+"%",font,Brushes.Coral,point);
測試效果如下:
總結
經過大緻五個步驟就可以使用GDI+的方式來繪制出一個好看的顯示百分比的環形控件,希望可以給大家一些啟發。
有話要說...