程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 自己編程模擬 MouseEnter,MouseExit 事件

自己編程模擬 MouseEnter,MouseExit 事件

編輯:VB綜合教程

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved