自己编程模拟 MouseEnter,MouseExit 事件

原创 2001年06月05日 22:03:00
 

自己编程模拟 MouseEnter,MouseExit 事件

 

很多第三方的控件都提供的 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 事件

自己编程模拟 MouseEnter,MouseExit 事件 很多第三方的控件都提供的 MouseEnter 和 MouseExit 事件来补充 MouseMove 事件的不足(MouseMove 事...
  • ehung
  • ehung
  • 2005年11月27日 19:48
  • 737

jQuery中的mouseenter和mouseleave事件

前端开发中经常会遇到事件maopo
  • blueinsect314
  • blueinsect314
  • 2014年05月10日 17:36
  • 603

JavaScript事件mouseover和mouseenter的区别

如题,mouseover和mouseenter的区别主要在于监听对象的子元素是否触发事件。 mouseover:鼠标移入监听对象中,或者从监听对象的一个子元素移入另一个子元素中时触发该事件。 mous...
  • lwenn
  • lwenn
  • 2015年05月23日 16:39
  • 1920

兼容ie/非ie实现mouseenter/leave,禁止mouseout/over冒泡

var getEvent = function (e) {            return window.event || e;        }        /*         * 检测鼠标...
  • qidizi
  • qidizi
  • 2013年04月09日 21:10
  • 1186

IsMouseOver 和MouseEnter\MouseLeave 事件

在界面程序中IsMouseOver 属性用来判断鼠标是否在某个界面元素上悬停。 如果当一个界面元素在逻辑树中被另外一个元素包含,当鼠标同时停在两个元素上的时候,两个元素的IsMouseOver 都是t...
  • Libby1984
  • Libby1984
  • 2017年02月22日 16:16
  • 999

c# 给窗体添加MouseEnter事件,可鼠标移到任意控件均会产生MouseEnter事件,如何识别是哪个产生的呢?

定义一个mouseEnter方法,格式如下: private void Control_MouseEnter(object sender, EventArgs e) { ...
  • qq_16542775
  • qq_16542775
  • 2016年08月15日 17:23
  • 2455

JS悬浮事件中hover、mouseenter、mouseleave、mousedown、mouseup、keydown、keyup、mouseover以及mouseout之间的区别

未经允许不得转载!! 水平有限,不周之处,欢迎指正、交流!! 之前在写悬浮事件的时候,一直以为都可以,而且还没出现莫名的bug,不放心,于是在这整理了下! 总之:hover = ...
  • ime33
  • ime33
  • 2017年02月10日 16:23
  • 1350

#学习笔记#(6)mouseenter-mouseleave显示隐藏内容-jQuery

mouseenter-mouseleave显示隐藏内容-jQuery label { background-color:green; color:white; font-size:22px; } ....
  • qq_24734285
  • qq_24734285
  • 2015年12月08日 09:39
  • 699

jquery中利用on绑定mouseenter事件与mouseleave事件实现鼠标hover事件

//HTML脚本 span data-helperinfo="PortfolioTeam" class="icon help">span> //JS脚本 $(document).on({ mou...
  • wlpz0528
  • wlpz0528
  • 2015年11月12日 10:03
  • 3132

jquery 中的hover(),mouseleave()&mouseenter()和mouseover()&mouseout()的区别

hover(),mouseover(),mouseout(),mouseenter() , mouseleave();
  • ss1106404013
  • ss1106404013
  • 2015年09月18日 11:58
  • 2356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己编程模拟 MouseEnter,MouseExit 事件
举报原因:
原因补充:

(最多只允许输入30个字)