目前新推出的各种软件中都存在一种共同的特征,将用户界面中的图形、命令、说明文字融为一体,将鼠标的移动和操作融为一体。如INTERNET网中的浏览器、可视编程软件中的操作菜单和工具按钮以及这些系统中的帮助功能等,都使各种命令区域融合到图形界面中去,当将鼠标指针移动到该区域上时,相应的命令按钮会凸起(也可能出现动态提示或按钮颜色变化,以提示操作者,从而实现
程序界面中的各种功能。用户界面中的这种超文本技术、动态技术和鼠标指示功能,给用户操作带来极大方便。
应用程序中的这种自动感应命令区域功能,就是鼠标输入焦点的控制功能。虽然上述控制技术在高级应用程序中才能见到,但在目前的可视化编程工具中实现起来并非特别困难。下面就以VB5. 0为例,介绍笔者在自己的应用
程序中实现鼠标输入焦点控制相关技术的详细实现方法和具体步骤。
定义鼠标输入焦点的命令区域
鼠标输入焦点(或称鼠标热点)是应用
程序界面中响应鼠标(或键盘)输入命令的客户区域,这个区域通常是规则的矩形(也可以是不规则的)。要控制鼠标的输入焦点,就必须判断鼠标发生动作的屏幕位置是否位于命令的客户区域内。所以,只要将命令的客户区域坐标数据保存到数组中,然后将鼠标发生动作的位置与数组中数据比较,就不难获取当前鼠标的输入焦点。如果需要在位图文件.BMP和.DBI等中设置焦点,可以利用Windows下的可视开发工具Visual C++和Visual Basic 等提供的热点编辑器。输入焦点的命令区域一般包括左上和右下两个坐标数值,除此之外还可以包含一些与相关提示和执行动作有关的其他信息。
在VB5.0的窗体声明部分,可以利用自定义数据类型的方法来确定鼠标输入焦点的数据结构。如笔者定义的数据结构中包括提示信息、执行信息和矩形客户区域的坐标值等。
Private Type RectHot
DoMess As String ;执行信息
Butt As String ;按钮显示
Mess As String ;提示信息
LeftX As Integer ;客户区域坐标
TopY As Integer
RightX As Integer
BottomY As Integer
;其他数据定义
End Type
Dim RectHots(8) As RectHot ;根据命令区域个数定义数组
鼠标输入焦点数据的初始化
问题 确定了鼠标输入焦点的数据结构之后,首先要根据界面中的按钮、标签和图形命令等确定数据与命令区域之间的对应关系,然后在Form-Load( )函数载入窗体时对数组中的成员进行初始化,以正确获取鼠标输入焦点。对于一般控件可直接在属性窗口中获得其准确坐标值,而对于
图片等图形控件,可利用鼠标取得其命令区域的坐标值。初始化方法如下:
Form-Load()
RectHots(1).DoMess = ″Do RECT 1″
RectHots(1).Mess = ″Mouse RECT 1″
RectHots(1).LeftX = 1080
RectHots(1).TopY = 240
RectHots(1).RightX = 3120
RectHots(1).BottomY = 1040
RectHots(2).DoMess = ″Do RECT 2″
RectHots(2).Mess = ″Mouse RECT 2″
RectHots(2).LeftX = 1080
RectHots(2).TopY = 840
RectHots(2).RightX = 3120
RectHots(2).BottomY = 1840
End Sub
鼠标输入焦点的控制方法
在鼠标输入焦点捕捉客户区域设置完成后,接着就必须在MouseMove( )函数中判断当前的鼠标光标位置是否落入某个特定客户区域内,如果位于特定客户区域内,则通过变量设置可将当前客户区域设置为具有鼠标输入焦点的有效区域,并进行客户区域颜色或凸凹状态的改变或者利用鼠标光标形状的改变以及动态提示等,来提示当前鼠标输入