关 键 词:
vb.net 控件 .NET Visual Basic
下面是绘制圆的函数:
|
Private Sub DrawLight(ByVal LightToDraw As TrafficLightStatus, _ ByVal grfGraphics As Graphics)
Dim nCircleX As Integer Dim nCircleY As Integer Dim nCircleDiameter As Integer Dim nCircleColor As Color
' 找到所有圆的 X 坐标和直径 nCircleX = CInt(Me.Size.Width * 0.02) nCircleDiameter = CInt(Me.Size.Width * 0.96) Select Case LightToDraw Case TrafficLightStatus.statusRed If LightToDraw = Me.Status Then nCircleColor = Color.OrangeRed Else nCircleColor = Color.Maroon End If nCircleY = CInt(Me.Size.Height * 0.01) Case TrafficLightStatus.statusYellow If LightToDraw = Me.Status Then nCircleColor = Color.Yellow Else nCircleColor = Color.Tan End If nCircleY = CInt(Me.Size.Height * 0.34) Case TrafficLightStatus.statusGreen If LightToDraw = Me.Status Then nCircleColor = Color.LimeGreen Else nCircleColor = Color.ForestGreen End If nCircleY = CInt(Me.Size.Height * 0.67)
End Select Dim bshBrush As System.Drawing.Brush If LightToDraw = Me.Status Then
bshBrush = New SolidBrush(nCircleColor) Else bshBrush = New SolidBrush(Color.FromArgb(60, nCircleColor)) End If
' 绘制代表红绿灯的圆 grfGraphics.FillEllipse(bshBrush, nCircleX, nCircleY, nCircleDiameter, nCircleDiameter)
' 释放笔刷 bshBrush.Dispose()
End Sub |
这是整个控件中唯一的一个复杂图形。在 GDI+ 中,在要绘制椭圆的矩形中指定左上角的 X 坐标和 Y 坐标,然后指定矩形的高度和宽度即可绘制一个椭圆。我们分别将 X 坐标和 Y 坐标称为 nCircleX 和 nCircleY。因为我们要绘制一个圆,因此矩形的高度等于宽度,用变量 nCircleDiameter 来控制该值。
将 nCircleX 设置为刚好放到控件内(控件的宽度乘以 0.02)。nCircleY 取决于要绘制哪个灯,可以设置成靠近控件的顶部(红灯)、大约向下三分之一(黄灯)或大约向下三分之二(绿灯)。直径 nCircleDiameter 设置为等于控件宽度的 96%。
要绘制实心椭圆,还需完成一件事,即确定要使用的颜色。颜色取决于正在绘制哪个灯以及正在绘制的灯是否亮起。亮起的灯的颜色要比熄灭的灯的颜色亮。
创建绘图要使用的笔刷时需要使用这些颜色。如果正在绘制的灯是亮起的,即使用该颜色。如果绘制的灯是熄灭的,则要使用不同的方法实例化笔刷。下面是熄灭的灯所使用笔刷的代码行:
bshBrush = New SolidBrush(Color.FromArgb(60, nCircleColor))
这并不是 .NET 中较好的方法名,但 FromArgB 方法的作用是创建笔刷,并通过将笔刷与背景颜色相结合来淡化颜色。第一个参数使用的数字介于 0 至 255 之间,数字越小,背景颜色渗透越深。我们使用的值为 60,它将大大降低处于熄灭状态的灯的颜色。您可以尝试对该参数使用不同的值(或将它设置成可设置属性),以获得不同的效果。
最后,Graphics 对象的 DrawEllipse 方法绘制出该圆,函数结束。记住,该函数需要调用三次以绘制三个不同的圆。