画板系统的设计与实现本工程以一个比较有趣的例子,来说明如何使用Visual Basic来开发Windows应用程序。本工程将使用VB来开发一个类似“画图”软件的程序,通过此程序,我们可以实现用鼠标画直线、矩形以及不规则线等,可以控制笔线粗细等功能。本系统可以完成以下任务:
通过自制调色板选取画笔的前景色和背景色。
用户可以设置控制画笔的粗细,颜色。
可以画点、线(直线和不规则线)、矩形等。
指示鼠标坐标,前景背景,按钮工具的信息等。
首先,现在窗体上添加各种控件,如图1-1、

图1-1画图板的设计窗口控件名称
主要控件属性名称
属性值
功能说明
Form1
Caption
画图板—VB
BorderStyle
3 – Fixed Dialog
StartUpPosition
2-屏幕中心
Label3
名称
Label3
容纳工具按钮
caption
工具按钮
font
宋体,5号,粗体,下划线
BorderStyle
1-Fixed
Command1
Style
1-Graphical
控件数组,为工具按钮
ToolTipText
分别为:新建、铅笔、画直线、画矩形、画点、橡皮
PictureBox 
名称
DrawPic
画布,主要的绘画区。
BorderStyle
1 – Fixed Single
PictureBox
名称
LineCon 
用来指示绘图的线宽,由其下面的滚动条控制。
BackColor
&H8000000F&
BorderStyle
1 – Fixed Single
HScrollBar
名称
HScroll1
控制绘图的线宽。
LargeChange
1
Max
20
Min
1
Label
名称
Info
用来显示提示信息等
Caption
工具指示器
BorderStyle
1 – Fixed Single
名称
Label4
Caption
鼠标坐标
Line1
这是一个线的控件数组,一黑一白,位置相对成立体效果
Label2
BorderStyle
1 – Fixed Single
存放前景背景颜色
Label
名称
ForeSee
存放前景颜色
BorderStyle
1 – Fixed Single
Label
名称
BackSee
存放背景颜色
BorderStyle
1 – Fixed Single
Label
名称
Label1
控件数组,用于存放颜料盒,选择不同的背景颜色。
BorderStyle
1 – Fixed Single
BackColor
(选择不同的颜色即可)
CommandButton
名称
Command2
Caption
画板清空
名称
Command3
Caption
退出

图1-2画图板的运行窗口
本系统采用的主要原理:
系统初始化:完成系统的各项初始化。
Dim nToolNum,nMyForeColor,nMyBackColor‘被访问的工具按钮、前景、背景
Dim nStartX,nStartY,nEndX,nEndY As Integer‘指定开始和结束坐标
Dim nLineWidth As Integer‘指定线宽
Dim DrawOrNot As Boolean ‘是否开始画图
Private Sub Form_Load()‘初始化各项参数
nToolNum = 0
nLineWidth = 1
DrawOrNot = False
nMyForeColor = RGB(0,0,0)
nMyBackColor = RGB(255,255,255)
DrawPic.ForeColor = nMyForeColor
DrawPic.BackColor = nMyBackColor
End Sub
在颜料盒中选定前景和背景:
Private Sub Label1_MouseUp(Index As Integer,Button As Integer,Shift As Integer,X As Single,Y As Single)
If (Button = 1) Then‘如果是左键,则进行前景颜色设置
ForeSee.BackColor = Label1(Index).BackColor‘使用控件数组获取颜色
DemoLine.BorderColor = ForeSee.BackColor‘显示线的颜色
nMyForeColor = ForeSee.BackColor
DrawPic.ForeColor = ForeSee.BackColor
End If
If (Button = 2) Then‘如果是右键,则进行背景颜色设置
BackSee.BackColor = Label1(Index).BackColor
LineCon.BackColor = BackSee.BackColor
nMyBackColor = BackSee.BackColor
End If
nMyForeColor = ForeSee.BackColor
nMyBackColor = BackSee.BackColor
End Sub
用滚动条控制画笔的线宽:
Private Sub HScroll1_Change()
LineCon.BackColor = BackSee.BackColor
DemoLine.BorderWidth = HScroll1.Value
DrawPic.DrawWidth = HScroll1.Value
End Sub
用鼠标进行画图的过程控制:
Private Sub DrawPic_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)‘依据按下的工具值,来进行坐标和作图方式的选择即DrawMode赋值,分为正常和异或(分别取值13和7)
Select Case nToolNum
Case 1
DrawPic.CurrentX = X,DrawPic.CurrentY = Y
DrawPic.DrawMode = 13
Case 2
nStartX = X,nStartY = Y
nEndX = X,nEndY = Y
DrawPic.DrawMode = 7
Case 3
nStartX = X,nStartY = Y
nEndX = X,nEndY = Y
DrawPic.DrawMode = 7
nStartX = X,nStartY = Y
Case 4
If Button = 1 Then
DrawPic.ForeColor = nMyForeColor
Else
DrawPic.ForeColor = nMyBackColor
End If
nStartX = X,nStartY = Y
DrawPic.DrawMode = 7
DrawPic.PSet (nStartX,nStartY),DrawPic.ForeColor
Case 5
DrawPic.CurrentX = X,DrawPic.CurrentY = Y
DrawPic.DrawMode = 13
nStartX = X,nStartY = Y
End Select
End Sub
Private Sub DrawPic_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single) ‘依据鼠标的移动来进行作图,并根据鼠标的左右键判断用前景还是背景作图
If Button <> 0 Then
If Button = 2 Then
DrawPic.ForeColor = nMyBackColor
Else
DrawPic.ForeColor = nMyForeColor
End If
Select Case nToolNum
Case 1
DrawPic.Line -(X,Y),DrawPic.ForeColor
Case 2
DrawPic.Line (nStartX,nStartY)-(nEndX,nEndY),Not (DrawPic.ForeColor)
DrawPic.Line (nEndX,nEndY)-(X,Y),Not (DrawPic.ForeColor)
nStartX = X,nStartY = Y
Case 3
DrawPic.Line (nStartX,nStartY)-(nEndX,nEndY),Not (DrawPic.ForeColor),B
DrawPic.Line (nEndX,nEndY)-(X,Y),Not (DrawPic.ForeColor),B
nStartX = X,nStartY = Y
Case 4
DrawPic.PSet (X,Y),nMyForeColor
Case 5
DrawPic.Line -(X,Y),nMyBackColor
End Select
End If
Label4.Caption = "X," & X & " Y," & Y‘显示鼠标的坐标位置
End Sub
Private Sub Drawpic_MouseUp(Button As Integer,Shift As Integer,X As Single,Y As Single) ‘依据按下的工具值,来用正常的绘图方式将画好的图重新绘制一遍,使在鼠标移动过程中的异或方式画的图被覆盖。使之能正常显示。
Select Case nToolNum
Case 2
DrawPic.Line (nEndX,nEndY)-(nStartX,nStartY)
DrawPic.DrawMode = 13
DrawPic.Line (nEndX,nEndY)-(nStartX,nStartY),DrawPic.ForeColor
Case 3
DrawPic.Line (nStartX,nStartY)-(nEndX,nEndY),Not (DrawPic.ForeColor),B
DrawPic.DrawMode = 13
DrawPic.Line (nStartX,nStartY)-(nEndX,nEndY),DrawPic.ForeColor,B
End Select
End Sub
点击工具按钮现实的提示信息:
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0:
Info.Caption = "你用的是清除画板"
DrawPic.Cls
Case 1:
nToolNum = 1
Info.Caption = "你用的是铅笔"
Case 2:
nToolNum = 2
Info.Caption = "你用的是画直线"
Case 3:
nToolNum = 3
Info.Caption = "你用的是画矩形"
Case 4:
nToolNum = 4
Info.Caption = "你用的是画点"
Case 5:
nToolNum = 5
Info.Caption = "你用的是橡皮"
End Select
End Sub
实现图形清屏:
Private Sub Command2_Click()
DrawPic.Cls
End Sub
推出系统:
Private Sub Command3_Click()
End
End Sub