网页功能: 加入收藏 设为首页 网站搜索  
自己编程模拟 MouseEnter,MouseExit 事件
发表日期:2003-07-21作者:[] 出处:  

很多第三方的控件都提供的 MouseEnter 和 MouseExit 事件来补充 MouseMove 事件的不足(MouseMove 事件不能有效的捕获鼠标是否已在控件外),但是这些控件或要注册,或集合了其他实际没有什么作用控件,另外在程序中加入太多的控件也会影响程序的性能,利用 Windows 的 API 函数,我们可以在 MouseMove 中模拟 MouseEnter 和 MouseExit,虽然我提供的源代码中没有真正的这两个事件,但的确提供了这两个事件所具备的功能。好了!让我们实现吧。

首先加载一个模块,在模块中声明以下两个 API 函数:

Public Declare Function SetCapture Lib "user32" _

(ByVal hwnd As Long) As Long

Public Declare Function ReleaseCapture Lib "user32" () As Long

SetCapture 的功能是:设置鼠标捕获指定的窗口(Windows 每个控件都是一个窗口。比如桌面上显示的图标就是一个窗口,其实是两个,另一个显示描述这个图标的文本),系统将收到这个窗口所有的鼠标移动或击按的所有信息。

ReleaseCapture 的功能是:取消捕获鼠标信息。

Windows 系统就是一个消息系统,系统一直在等待用户的消息,并加一相应,但处理完一个消息后,系统有处以下一轮的等待。消息传递是 Windows 的核心。

让我们在 Form1 中放置一个按钮或其他控件,但此控件必须具有窗口句柄(hWnd),比如 VB 提供的 Image 控件是一个次图形控件,没有窗口句柄,而 Picture,Command Button 等控件就有窗口句柄,我们就拿 Command Button 来作示范,在 Form1 上放置一个 Command Button,在 Command1_MouseMove()事件内加入以下代码:

Private Sub Command1_MouseMove(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

With Command1

'当鼠标在越出控件外

If Not ((X < 0) Or (Y < 0) Or _

(X > .Width) Or (Y > .Height)) Then

'鼠标指针在按钮外时,让其他控件也收到标事件

ReleaseCapture

'为了不让 MouseMove 事件反复触发

If .Caption <> "outside" Then

.Caption = "outside"

End If

'鼠标指针在按钮上,捕获他但鼠标移出是我们将收到鼠标事件

SetCapture .hwnd

Else

.Caption = "inside"

End If

End With

End Sub

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 自己编程模拟 MouseEnter,MouseExit 事件
本类热点文章
  在VB中使用WMI获取系统硬件和软件有关信..
  在VB中使用WMI获取系统硬件和软件有关信..
  将繁体中文字转化成简体中文
  将繁体中文字转化成简体中文
  获取CPU的ID
  获取CPU的ID
  在vb程序中如何获取剪贴板中所复制的文..
  在vb程序中如何获取剪贴板中所复制的文..
  更新桌面图片
  更新桌面图片
  VB编程破解Windows屏幕保护密码
  让程序的鼠标支持滚轮
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2022 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00379