查看: 119  |  回复: 0
  VB6 自己编程模拟 MouseEnter,MouseExit 事件
楼主
发表于 2024年10月21日 23:22

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

新建From1(窗体),新建Command1(按钮CommandButton),代码:

Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long

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


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com