1. 掌握 Click, DblClick 事件。
2. 掌握 MouseDown,MouseUp事件。
3. 掌握 MouseMove 事件。
4. 了解鼠标事件在程序设计中应用。
一、绘制彩色线条
当单击窗体底部不同颜色的按钮后,在窗体上按下鼠标左键并拖动鼠标,可以绘制相应颜色的线条。单击“CLEAR”按钮,可清除窗体上的所有线条;单击“EXIT”按钮,终止程序的运行。本程序运行效果如图13-1所示。

本程序的设计步骤如下。
1. 向窗体中添加命令按钮Command1,设置其 Caption属性为空;设置其BackColor属性为红色;Style属性为1—Graphical,最后调整其大小和位置。
2. 采用相同的方法,向窗体中分别添加其它按钮Command2~Command6,如图13-1所示,并使之代表不同的颜色。
3. 添加命令按钮Command7和Command8,并设置它们的Caption属性分别为CLEAR和EXIT。
4. 编写以下代码,调试运行程序。
OptionExplicit
DimFlag As Boolean
DimCLR
PrivateSub Command1_Click()
CLR = vbRed
EndSub
PrivateSub Command2_Click()
CLR = vbYellow
EndSub
PrivateSub Command3_Click()
CLR = vbGreen
EndSub
PrivateSub Command4_Click()
CLR = vbBlue
EndSub
PrivateSub Command5_Click()
CLR = vbWhite
EndSub
PrivateSub Command6_Click()
CLR = vbBlack
EndSub
PrivateSub Command7_Click()
Cls
EndSub
PrivateSub Command8_Click()
End
EndSub
PrivateSub Form_Load()
Form1.DrawWidth = 3
EndSub
PrivateSub Form_MouseDown(Button As Integer, Shift As Integer, _
XAs Single, Y As Single)
IfButton = 1 Then Flag = True
CurrentX = X
CurrentY = Y
EndSub
PrivateSub Form_MouseMove(Button As Integer, Shift As Integer, _
XAs Single, Y As Single)
If Flag Then Line -(X, Y), CLR
EndSub
Private Sub Form_MouseUp(Button AsInteger, Shift As Integer, _
X As Single, Y As Single)
Flag = False
EndSub
问题:在运行程序时,如果在单击任何颜色按钮之前,按下鼠标左键并在窗体上拖动鼠标,是否能画出线条? ;如果能,它的颜色由什么决定?
二、鼠标单击事件的应用
在窗体上有9个按钮排列成3行3列。当第1、3、5……次单击任意一个按钮时,被单击的按钮上显示字符“X”,当第2、4、6……次单击任意一个按钮时,被单击的按钮上显示字符“O”。程序运行效果如图13-2所示。

本程序的设计步骤如下。
1. 添加一个命令按钮Command1,设置其Caption属性为空,最后调整该按钮的大小。
2. 选定该按钮,单击工具栏上的“复制”按钮,再单击工具栏上的“粘贴”按钮,在弹出的如图13-3所示的确认对话框中,单击“是”按钮。多次使用“粘贴”命令,向窗体上添加9个按钮,并将它们摆放整齐。

3. 双击窗体中的任意一个命令按钮,在Click事件过程中添加如下代码:
PrivateSub Command1_Click(Index As Integer)
Staticxo As Boolean
Ifxo Then
Command1(Index).Caption= "O"
Else
Command1(Index).Caption= "X"
EndIf
xo= Not xo
EndSub
参照上述代码编写程序,使当单击9个按钮中的任一按钮时,被单击的按钮上交替显示“A”、“B”、“C”。即当第1、4、7……次单击某按钮时,被单击的按钮上显示字符“A”;而当第2、5、8……次单击某按钮时,被单击的按钮上显示“B”;第3、6、9……次单击某按钮时,被单击的按钮上显示“C”。
三、简单的画图程序
结合鼠标事件和绘图方法设计一个模拟的“画图”程序。程序运行效果如图13-4所示

本程序的设计步骤如下。
1. 向窗体中添加两个PictureBox控件:Picture1和Picture2。
2. 向Picture1中添加四个单选钮:Option1、Option2、Option3和Option4。调整其大小刺骨设置它们的Style属性值为:1—Graphical,Caption属性分别为“画笔”、“直线”、“圆”、“矩形”。
3. 根据图13-5所示,向窗体中添加菜单。

(4)补充完善如下代码,并调试通过。
OptionExplicit
Private MYCOLOR As Long '颜色
Private xStart As Single '起点X坐标
Private yStart As Single '起点Y坐标
Private xOld As Single '上一点X坐标
Private yOld As Single '上一点Y坐标
Private r As Single '当前半径
Private rOld As Single '上一次半径
PrivateSub Form_Load()
MYCOLOR = Picture1.ForeColor
Picture1.DrawWidth = 3
EndSub
PrivateSub Picture1_MouseDown(Button As Integer, _
ShiftAs Integer, X As Single, Y As Single)
If Button = 1 Then
xStart = X
yStart = Y
xOld = xStart
yOld = yStart
rOld = 0
Picture1.DrawMode = 7
Picture1.Line (xStart, yStart)-(xOld,yOld), _
Picture1.BackColor
Picture1.Line (xStart, yStart)-(X, Y),MYCOLOR
End If
EndSub
PrivateSub Picture1_MouseMove(Button As Integer, Shift As _
Integer,X As Single, Y As Single)
'画笔
If Option1.Value And Button = 1 Then
Picture1.DrawMode = 13
Picture1.Line (xOld, yOld)-(X, Y), MYCOLOR
xOld = X
yOld = Y
End If
'直线
If Option2.Value And Button = 1 Then
Picture1.Line (xStart, yStart)-(xOld,yOld), _
Picture1.BackColor '消除背景色
Picture1.Line (xStart, yStart)-(xOld,yOld), MYCOLOR
Picture1.Line (xStart, yStart)-(X, Y),Picture1.BackColor
Picture1.Line (xStart, yStart)-(X, Y),MYCOLOR
xOld = X
yOld = Y
End If
'圆
If Option3.Value And Button = 1 Then
Picture1.Circle (xStart, yStart), rOld,Picture1.BackColor
Picture1.Circle (xStart, yStart), rOld,MYCOLOR
r =
Picture1.Circle (xStart, yStart), r,Picture1.BackColor
Picture1.Circle (xStart, yStart), r,MYCOLOR
rOld =
End If
'矩形
IfOption4.Value And Button = 1 Then
Picture1.Line (xStart, yStart)-(xOld,yOld), _
Picture1.BackColor,B
Picture1.Line (xStart, yStart)-(xOld,yOld), MYCOLOR, B
xOld = X
yOld = Y
EndIf
EndSub
PrivateSub Picture1_MouseUp(Button As Integer, Shift As Integer, _
XAs Single, Y As Single)
Picture1.DrawMode = 13
'直线
If Option2.Value And Button = 1 Then
Picture1.Line (xStart, yStart)-(X, Y),MYCOLOR
End If
'圆
If Option3.Value And Button = 1 Then
Picture1.Circle (xStart, yStart), r,MYCOLOR
Picture1.PSet (xStart, yStart),Picture1.BackColor
End If
'矩形
If Option4.Value And Button = 1 Then
End If
EndSub
PrivateSub RED_Click()
MYCOLOR= vbRed
EndSub
PrivateSub YELLOW_Click()
MYCOLOR= vbYellow
EndSub
PrivateSub BLUE_Click()
MYCOLOR= vbBlue
EndSub
PrivateSub CLEAR_Click()
Picture1.Cls
EndSub
PrivateSub EXIT_Click()
End
EndSub