Kiểm tra con trỏ nằm trong một cửa sổ hay không ?

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
Post Reply
User avatar
tuyen_dt18
Guru
Guru
Posts: 261
Joined: Sat 19/04/2008 8:46 pm
Location: Hưng Yên
Been thanked: 40 times
Contact:

Kiểm tra con trỏ nằm trong một cửa sổ hay không ?

Post by tuyen_dt18 »

Thủ thuật: Xác định con trỏ chuột có nằm trong một cửa sổ hay không !
Tác giả: tuyen_dt18
Mô tả:

Code: Select all

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, lpRect As RECT) As Long

Private Type POINTAPI
    x As Long
    y As Long
End Type
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Function IsHover(ByVal hWnd As Long) As Boolean
    Dim P As POINTAPI, RC As RECT
    GetCursorPos P
    GetWindowRect hWnd, RC
    ScreenToClient hWnd, P
    If (P.x >= 0) And (P.x < (RC.Right - RC.Left)) And (P.y >= 0) And (P.y <= (RC.Bottom - RC.Top)) Then
        IsHover = True
    Else
        IsHover = False
    End If
End Function

Sử dụng :  Tạo 1 Project mới, thêm một Timer với Interval=100 vào, Paste đoạn code trên vào, sao đó thêm code dưới đây vào sự kiện Timer() của Timer1  sau , và chạy chương trình :
Private Sub Timer1_Timer()
    If IsHover(Me.hWnd) Then
        Me.Caption = "Hover Form"
    Else
        Me.Caption = "Leave Form"
    End If
    If IsHover(Command1.hWnd) Then
        Command1.Caption = "Hover"
    Else
        Command1.Caption = "Leave"
    End If
End Sub

Hỏi ý kiến tác giả trước khi sử dụng hoặc trích dẫn rõ nguồn bài viết khi sử dụng.
User avatar
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Posts: 1259
Joined: Thu 03/06/2010 9:23 pm
Location: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Contact:

Re: Kiểm tra con trỏ nằm trong một cửa sổ hay không ?

Post by VuVanHoanh »

Cần gì phải làm thế? Check vị trí của chuột đối với hWnd của form mà chẳng được
  1. 'Khai báo hàm để lấy vị trí chuột + type cần thiết
  2. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI)
  3. Private Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  4.  
  5. Private Type POINTAPI
  6.      x As Long
  7.      y As Long
  8. End Type
  9.  
  10. 'Cần một form, 1 label, 1 timer
  11. 'Timer's Interval = 1
  12.  
  13. Private Sub Timer1_Timer()
  14. Dim pt As POINTAPI
  15. GetCursorPos pt
  16. If WindowFromPoint(pt.x, pt.y) = Me.hWnd Then
  17.      Label1.Caption = "Mouse is being in form"
  18. Else
  19.      Label1.Caption = "Mouse left form"
  20. End if
  21. End Sub
Since 2008...
One love! :x
Post Reply

Return to “[VB] Ứng dụng - Form và Control”