- 11
- 0
- 约2.42万字
- 约 22页
- 2017-10-13 发布于浙江
- 举报
VB程序中实现鼠标的
在VB程序中实现鼠标右键双击
西北工业大学(710072) 况正谦
在Microsoft Visual BASIC(VB)中,窗体(Form)和控件(Control)等对象的单击(Click)和双击(Double-Click)事件都是指鼠标左键而言的。鼠标右键的单击和双击事件在VB中没有对应的事件驱动过程去响应和处理。但是在实际应用中(特别是一些可视化的图形软件)可能对鼠标键的功能定义比较丰富,单靠鼠标左键的单击和双击难以满足复杂的需要。因此有必要开发和扩充VB应用程序对鼠标右键的响应能力。 VB定义的鼠标事件 VB定义的鼠标事件有五种:单击(Click)、双击(DblClick)、鼠标键按下(MouseDown)、鼠标键松开(MouseUp)和鼠标光标移动(MouseMove)。其中前两种事件单击和双击是专指鼠标左键而言,后三种则适用于所有鼠标键。后三种鼠标事件的事件驱动过程有如下的形式: Sub对象名-鼠标事件(Button As Integer,Shift As Integer, X As Single, Y As Single) 用户插入的事件响应和处理代码 End Sub 传递给事件过程的参数中,整型数Button的最低三位从右到左分别对应鼠标左、右、中三个键。事件发生时,哪个或哪些键处于被按下的状态,Button的对应位就为1,否则为0。程序中可以用VB的位运算AND来检测鼠标键的状态。整数Shift的最低三位从右到左分别对应事件发生时键盘的Shift、Ctrl、Alt键。事件发生时,Shift、Ctrl、Alt中的哪个或哪些键处于被按下的状态,参数Shift的对应位就为1,否则为0。单精度值X和Y存放的是事件发生时鼠标光标的X-Y坐标值。该值对于窗体对象而言是鼠标光标在窗体客户区中的坐标,对于控件对象则是鼠标光标在窗体客户区中相对于控件左上角的坐标。 鼠标右键事件的检测 实际上,鼠标的单击事件可以被分解为MouseDown和MouseUp两个事件,所以我们可以用MouseDown事件来取代单击事件。同样,鼠标双击事件也可以分解为两个非常紧凑的单击事件。根据这一思路,我们可以在MouseDown事件过程中判定鼠标右键的单击和双击事件,并作出相应的响应和处理。 1.右键单击的判断和处理 鼠标右键单击事件的判断很简单,只需在MouseDown事件过程中检测一个Button参数。如下所示: Sub对象名-MouseDown(Button As Integer,Shift As Integer, X As Single, Y AsSingle) If Button = 2 Then 鼠标右键按下 鼠标右键单击的响应和处理代码 End If End Sub 2.右键双击的判断和处理 Windows对鼠标双击的定义是:同一鼠标键的两次快速按动-放开。只要两次按键的时间间隔不超过某一阈值,Windows就作为双击对待,否则认为是两次单击。这一阈值称为DoubleClickSpeed,它是在Widnows启动时从初始化文件WIN.INI中读入的。这一阈值在WIN.INI文件[Windows]段的Dou-bleClickSpeed项中存放,以毫秒为单位。一般情况下DoubleClickSpeed值为452毫秒,但是也可以在WIN.INI中人为地改变这一设定。 为了判断鼠标右键的双击事件,我们需要在程序中读取WIN.INI中的DoubleClick-Speed值。以后每次鼠标右键按下时,在Mouse-Down事件过程中都要读当前的系统时间,并与上次按键的时间比较,看是否超过Dou-bleClickSpeed值:如果没超过,则转到双击事件的响应呼处理代码,否则作为单击事件处理。 这里涉及读WIN.INI的问题。虽然WIN.INI是格式固定的文本文件,但是用读文本文件的方法去查找DoubleClickSpeed还是很麻烦。Windows系统专门提供了一组函数用于访问Windows的初始化文件,这组函数同其它一些函数包含在Windows的三个系统动态链接库(DDL)中。在Windows的软件开发环境中,一般都提供了访问这些函数的能力,这是通过Windows的应用程序接口(API)实现的。Windows API函数库中包含了几百个功能强大的系统函数,VB程序可以通过调用API函数完成很多VB系统本身不提供的功能。 在VB中调用API函数之前,首先要用Declare语句对调用的函数、函数所在的动态链接库、函数的参数和返回类型进行必要的声明。声明格式为: Declare Function API函数名Lib动态链接库名(形式参数表) As 返回类型 为了读取WIN.INI文件中某一项的值,我们需要调用API函数GetProfileIn
原创力文档

文档评论(0)