Windows mobile 开发入门—控件开发(漂亮的进度条)
最终的效果如上图.它主要是由几个图片绘制而成,左右两个圆角、经过的、未经过的还有一个%分数。原理非常简单,我们看看代码吧。
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
}133

浙公网安备 33010602011771号