鼠标是WINDOWS环境下不可缺少的输入工具,在应用程序中灵活地使用鼠标功能,会给工作带来极大的方便.VISUAL FOXPRO6.0和VISUAL BASIC6.0是MICROSOFT VISUAL STUDIO98面向对象的可视化开发环境,它功能非常强大,而且设计程序简单实用.它提供了与鼠标操作有关的事件和API函数,所以编写鼠标功能程序就变得非常简单,只需在程序中调用这些事件和API函数即可.
一.与鼠标有关的事件和WINDOWS API函数:
1.MOUSEDOWN 按下鼠标事件.
当用户按下鼠标上的任一按钮时,就会引发该事件.
调用格式:
Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
①BUTTON参数是用来指示鼠标按钮的状态.它用二进制来表示.参数值含义如下:
001:左按钮按下. 010:右按钮按下.
011:左右按钮都按下. 000:都没按下.
100:中间按钮按下. 111:三个按钮都按下.
②SHIFT参数用来指示SHIFT,CTRL和ALT三个键的状态.参数值含义如下:
001:SHIFT按下. 010:CTRL按下.
110:CTRL和ALT按下. 011:SHIFT和CTRL按下.
100:ALT按下. 101:SHIFT和ALT按下.
111:SHIFT,CTRL和ALT都按下.
③参数X和Y指示鼠标在对象上按下时的位置.
2.MOUSEUP 释放鼠标事件.
当用户松开鼠标按钮时,就会引发该事件.
调用格式:(参数含义与MOUSEDOWN过程相同.)
Private Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
3.MOUSEMOVE 移动鼠标事件.
当用户将鼠标移到新位置时,就会引发该事件.
调用格式:(参数含义与MOUSEDOWN过程相同.)
Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
4.WINDOWS API的SwapMouseButton()函数对换鼠标的左右键.
语法格式:
Private Declare Function SwapMouseButton Lib "USER32" Alias "SwapMouseButtonA" (ByVal BSWAP As Integer) As Integer
参数BSWAP含义:如为TRUE,则左按钮产生右按钮的鼠标消息,右按钮产生左按
钮的鼠标消息.如为FALSE,则正常解释鼠标按钮的输入.
返回值含义:如为TRUE,说明鼠标的左右按钮功能已经对调.如为FLASE,说明鼠
标按钮功能恢复原状态.
──────────? ───────────────────ぉぉぉぉぉぉぉぁ ?
二.VISUAL FOXPRO应用实例:
实例一:利用鼠标事件在窗体上画圆。
当鼠标左键按下时可以作图,而当鼠标左键释放时,则无法作图;而当鼠标移动时,
则画出图来。把鼠标左键按下与否作为作图的开关,鼠标移动就连续画图,本例是
连续画出圆来。效果如图1。
图1
在窗体FORM1建立如下事件:
Form1LPARAMETERS nButton, nShift, nXCoord, nYCoord
Form1.Init事件,建立一个全局变量mark,用于是否画图的开关变量,
当mark为真时,可以作图,否则不能作图。
public mark
thisform.scalemode=3
thisform.drawwidth=2
Form1.MouseDown事件,将mark设置为真,表示可以画图。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
mark=.t.
Form1.MouseUp事件,将mark设置为假,表示不能画图。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
mark=.f.
Form1.MouseMove事件,移动鼠标连续画圆。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
if mark and bittest(nbutton,0)
thisform.circle(20,nxcoord,nycoord)
endi
实例二:利用鼠标事件切换图标按钮中的图标。
COMMAND1控件的PICTURE属性是C:B.BMP
Form1.load事件,定义开关变量mouse_down。
public mouse_down
mouse_down=0
Form1.MouseDown事件,显示鼠标按下时的图标。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
THISFORM.COMMAND1.PICTURE="C:A.BMP"
mouse_down=1
Form1.MouseUp 事件,显示鼠标松开时的图标。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
THISFORM.COMMAND1.PICTURE="C:B.bmp"
Form1.MouseMove事件,判别鼠标是否离开图形按钮,若离开,则显示松开时的图标。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
if mouse_down=1
if (nXCoord$#@60;0.or. nXCoord$#@62;thisform.command1.width) .or. (nYCoord$#@60;0 .or. nYCoord$#@62;thisform.command1.height)
THISFORM.COMMAND1.PICTURE="C:B.BMP"
endi
endi
三.VISUAL BASIC应用实例:
实例一:给应用程序的命令按钮加上提示行.
实现效果:用过WINDOWS OFFICE软件的用户,都非常熟悉这种情况,当你自己不
清楚软件中所列出的图标按钮起什么作用时, 可以把鼠标移到这个
图标按钮上,不一会儿在这图标按钮的下方会显示一个简短的文字提
示行,说明这个图标按钮的作用;当把鼠标从这个按钮上移开后,提示
行立刻消失.
实现方法:
(1)建立含有如下控件的窗体:
控件 NAME CAPTION VISIBLE
窗体 BOTTON_DEMO 实例一:给应用程序的命令按钮加上提示行程序窗口
命令按钮 COMMAND1 TRUE
标签 LABEL1 FALSE 显示图标按钮作用的文字
(2)双击窗体,进入窗体装入事件代码窗口:
Private Sub Form_Load ( )
COMMAND1.Picture = LoadPicture("C:README.ICO") 装入图片
End Sub
(3)当鼠标移到按钮上方时,激活标签显示该图标按钮作用的文字.
双击图标按钮,进入命令按钮MOUSEMOVE事件代码窗口:
Private Sub Command1_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
LABEL1.BorderStyle = 1
LABEL1.BACKCOLOR =&H0000FFFF& 显示文字的标签框底色为黄色
LABEL1.Visible = True
LABEL1.CAPTION = "演 示"
End Sub
(4)当鼠标从按钮上移开后,提示行文字立即消失.
双击窗体,进入窗体MOUSEMOVE事件代码窗口:
Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
LABEL1.Visible = False
End Sub
实例二:互换鼠标的左右按钮.
实现效果:当你的鼠标左键或右键不好时,通过调用WINDOWS API的SwapMouseButton()
函数,实现鼠标的左右键互换.
实现方法:
(1)建立含有如下控件的窗体:
控件
NAME
CAPTION
窗体 SWAP_BUTT
实例二:鼠标的左右按钮互换 程序窗口
命令按钮 COMMAND1
鼠标的左右键互换
命令按钮 COMMAND2
恢复原状态
命令按钮 COMMAND3
退出
命令按钮 COMMAND4
清除标志
标签 LABEL1
按下左按钮:( )
标签 LABEL2
按下右按钮:( )
标签 LABEL3
空 显示按下标志
标签 LABEL4
空
(2)在目标文件列表(OBJECT)中选择GENERAL,在过程列表(PROC)中选择DECLARATIONS
(声明),系统进入窗体级代码的定义窗口中.输入如下定义:
Private Declare Function SwapMouseButton Lib "USER32" Alias "SwapMouseButtonA" (ByVal BSWAP As Integer) As Integer
(3)双击窗体,进入MOUSEUP事件代码窗口:
Private Sub Form_MouseUp (BUTTON As Integer, Shift As Integer, X As Single, Y As Single)
If BUTTON And &H111 Then
LABEL3.Caption = "√"
Else
LABEL4.Caption = "√"
End If
End Sub
(4)双击命令按钮1,进入命令按钮单击事件代码窗口:
Private Sub Command1_Click ()
Dim SWAP_BUTT As Integer
SWAP_BUTT = SWAPMOUSEBUTTON(-1) 互换鼠标的左右键
End Sub
(5)双击命令按钮2,进入命令按钮单击事件代码窗口:
Private Sub Command2_Click ()
Dim SWAP_BUTT As Integer
SWAP_BUTT = SWAPMOUSEBUTTON(0) 恢复鼠标的原状态
End Sub
(6)双击命令按钮3,进入命令按钮单击事件代码窗口:
Private Sub Command4_Click ()
LABEL3.Caption = " "
LABEL4.Caption = " "
End Sub
(7)双击退出按钮,进入命令按钮单击事件代码窗口:
Private Sub Command3_Click ()
End
End Sub
以上程序在WINDOWS98,VISUAL FOXPRO 6.0,VISUAL BASIC 6.0环境下运行通过.