|
最終的效果如上圖.它主要是由幾個(gè)圖片繪制而成,左右兩個(gè)圓角、經(jīng)過的、未經(jīng)過的還有一個(gè)%分?jǐn)?shù)。原理非常簡(jiǎn)單,我們看看代碼吧。 1 using System;2 ![]() 3 using System.Collections.Generic;4 using System.ComponentModel;5 using System.Data;6 using System.Drawing;7 using System.Text;8 using System.Windows.Forms;9 using System.Drawing.Imaging;10 using System.Reflection;11 ![]() 12 namespace Mediar.Controls13 ![]() ![]() {14 public partial class ProgressBar : Control15 ![]() {16 17 ![]() 18 private byte maximum = 100;19 public byte Maximum20 ![]() {21 ![]() set { maximum = value; }22 ![]() get { return maximum; }23 ![]() 24 }25 ![]() 26 private byte minimum = 0;27 public byte Minimum28 ![]() {29 ![]() set { minimum = value; }30 ![]() get { return minimum; }31 ![]() 32 }33 34 35 ![]() 36 ![]() public int Value { get; set; }37 ![]() 38 ![]() 39 private Color passColor = Color.Blue;40 public Color PassColor41 ![]() {42 ![]() set { passColor = value; }43 ![]() get { return passColor; }44 ![]() 45 }46 ![]() 47 private Color unPassColor = Color.Gray;48 public Color UnPassColor49 ![]() {50 ![]() set { unPassColor = value; }51 ![]() get { return unPassColor; }52 ![]() 53 }54 ![]() 55 public ProgressBar()56 ![]() {57 this.Height = 33;58 InitializeComponent();59 60 }61 ![]() 62 protected override void OnPaint(PaintEventArgs pe)63 ![]() { 64 ![]() 65 DrawEllipse();66 ![]() 67 ![]() 68 base.OnPaint(pe);69 }70 private void DrawEllipse()71 ![]() {72 //System.Drawing.Pen myPen;73 //myPen = new System.Drawing.Pen(System.Drawing.Color.Red);74 ![]() 75 Brush bUnPass = new SolidBrush(unPassColor);76 ![]() 77 Brush bPass = new SolidBrush(passColor);78 ![]() 79 Assembly assembly = this.GetType().Assembly;80 System.IO.Stream passStart = assembly.GetManifestResourceStream(@"Mediar.Controls.Images.passStart.png");81 System.IO.Stream pass = assembly.GetManifestResourceStream(@"Mediar.Controls.Images.pass.png");82 System.IO.Stream unpass = assembly.GetManifestResourceStream(@"Mediar.Controls.Images.unpass.png");83 System.IO.Stream textBackgroud = assembly.GetManifestResourceStream(@"Mediar.Controls.Images.textBackgroud.png");84 System.IO.Stream end = assembly.GetManifestResourceStream(@"Mediar.Controls.Images.end.png");85 ![]() 86 ![]() 87 Image passStartpng = new Bitmap(passStart);88 ![]() 89 System.Drawing.Graphics formGraphics = this.CreateGraphics();90 ![]() 91 int iPass = (int)((Value * 1.0 / (Maximum - Minimum)) * this.Width);92 int y = 10;93 ![]() 94 formGraphics.DrawImage(passStartpng, 0, y);95 ![]() 96 ![]() 97 formGraphics.DrawImage(new Bitmap(pass), new Rectangle(8, y, iPass, 12), new Rectangle(0, 0, 1, 12), GraphicsUnit.Pixel);98 ![]() 99 formGraphics.DrawImage(new Bitmap(unpass), new Rectangle(8 + iPass, y, this.Width - iPass - 14, 12), new Rectangle(0, 0, 1, 12), GraphicsUnit.Pixel);100 ![]() 101 ![]() 102 formGraphics.DrawImage(new Bitmap(end), this.Width - 8, y);103 ![]() 104 if (this.Width - iPass < 25)105 iPass = this.Width - 25;106 else if (iPass < 25)107 iPass = 25;108 ![]() 109 ![]() 110 ![]() 111 ![]() 112 formGraphics.DrawImage(new Bitmap(textBackgroud), iPass - 25, 0);113 ![]() 114 SizeF sf = formGraphics.MeasureString(string.Format("{0}%", Value), this.Font);115 formGraphics.DrawString(string.Format("{0}%", Value), this.Font, new SolidBrush(this.ForeColor), iPass - sf.Width / 2, (33 - sf.Height) / 2);116 ![]() 117 ![]() 118 ![]() 119 ![]() 120 bPass.Dispose();121 formGraphics.Dispose();122 }123 ![]() 124 125 ![]() 126 ![]() 127 internal Color GetTransparentColor(Bitmap image)128 ![]() {129 return image.GetPixel(0, 0);130 }131 }132 } |
|
|