如何实现:当鼠标离开窗体时,激发事件?多谢!

解决方案 »

  1.   

    Option ExplicitPrivate Type POINTAPI
        X As Long
        Y As Long
    End Type
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As LongPrivate Sub Form_Load()
        Timer1.Interval = 500
        Timer1.Enabled = True
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Timer1.Enabled = False
    End SubPrivate Sub Timer1_Timer()
    On Local Error Resume Next
        Static lX As Long, lY As Long
        Dim P As POINTAPI, h As Long, hD As Long, r As Long
        
        '获取鼠标当前位置的坐标,以屏幕为坐标系
        GetCursorPos P
        
        '判断当前点是否刚取过
        If P.X = lX And P.Y = lY Then Exit Sub
        lX = P.X: lY = P.Y    '获取当前鼠标所在点所属窗口的句柄
        h = WindowFromPoint(lX, lY)
        
        If h <> Me.hwnd Then
            MsgBox "I was out!"
        End If
    End Sub
      

  2.   

    以上代码在窗体上没有其它控件时运行正常。
    如果有其它控件,需要判断用WindowFromPoint(lX, lY)取得的句柄是否跟窗体的句柄和窗体上所有控件的句柄都不一样(有些控件是没有句柄的),如果都不一样,说明是在窗体外面。