自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

VB.NET鼠標(biāo)手勢實現(xiàn)技巧分享

開發(fā) 后端
VB.NET鼠標(biāo)手勢的實現(xiàn)方法將會在這篇文章中詳細(xì)給出。初學(xué)者可以通過這篇文章介紹的內(nèi)容對這一應(yīng)用技巧有一個充分的掌握。

VB.NET可以幫助我們實現(xiàn)許多以前比較難已實現(xiàn)的功能。比如在鼠標(biāo)手勢的實現(xiàn)方面,就可以使用這一語言輕松的實現(xiàn)。下面就為大家詳細(xì)介紹一下這方面的應(yīng)用技巧,希望能給大家?guī)硪恍椭?/p>

1.什么是鼠標(biāo)手勢:

我的理解,按著鼠標(biāo)某鍵(一般是右鍵)移動鼠標(biāo),然后放開某鍵,程序會識別你的移動軌跡,做出相應(yīng)的響應(yīng).

 2.VB.NET鼠標(biāo)手勢實現(xiàn)原理:

首先說明一下,我在網(wǎng)上沒有找到相關(guān)的文檔,我的方法未必與其他人是一致的,實際效果感覺還可以.
鼠標(biāo)移動的軌跡我們可以將其看成是許多小段直線組成的,然后這些直線的方向就是鼠標(biāo)在這段軌跡中的方向了. 

 3.VB.NET鼠標(biāo)手勢實現(xiàn)代碼:

還要說明一下,

a)要捕獲鼠標(biāo)的移動事件,可以使用vb中的mousemove事件,但這個會受到一些限制(例如,在webbrowser控件上就沒有這個事件).于是這個例子中,我用win api,在程序中安裝個鼠標(biāo)鉤子,這樣就能夠捕獲整個程序的鼠標(biāo)事件了.

b)這個里只是個能捕獲鼠標(biāo)向上,下,左,右的移動的例子.(呵呵,其實這四方向一般也足夠了:))

新建Standrad EXE,添加一個Module

form1的代碼如下

 

  1. Option Explicit   
  2. Private Sub Form_Load()   
  3. Call InstallMouseHook   
  4. End Sub   
  5. Private Sub Form_QueryUnload
    (Cancel As Integer, 
    UnloadMode As Integer)   
  6. Call UninstallMouseHook   
  7. End Sub  

 

#p#

Module1的代碼如下

 

  1. Option Explicit   
  2. Public Const HTCLIENT As Long = 1   
  3. Private hMouseHook As Long   
  4. Private Const KF_UP As Long = &H80000000   
  5. Public Declare Sub CopyMemory Lib "kernel32"
     Alias "RtlMoveMemory" (hpvDest As Any,
     hpvSource As Any, ByVal cbCopy As Long)   
  6. Private Type POINTAPI   
  7. X As Long   
  8. Y As Long   
  9. End Type   
  10. Public Type MOUSEHOOKSTRUCT   
  11. pt As POINTAPI   
  12. hwnd As Long   
  13. wHitTestCode As Long   
  14. dwExtraInfo As Long   
  15. End Type   
  16. Public Declare Function CallNextHookEx
     Lib "user32" _   
  17. (ByVal hHook As Long, _   
  18. ByVal ncode As Long, _   
  19. ByVal wParam As Long, _   
  20. ByVal lParam As Long) As Long   
  21. Public Declare Function 
    SetWindowsHookEx Lib "user32" _   
  22. Alias "SetWindowsHookExA" _   
  23. (ByVal idHook As Long, _   
  24. ByVal lpfn As Long, _   
  25. ByVal hmod As Long, _   
  26. ByVal dwThreadId As Long) As Long   
  27. Public Declare Function UnhookWindows
    HookEx Lib "user32" _   
  28. (ByVal hHook As Long) As Long   
  29. Public Const WH_KEYBOARD As Long = 2   
  30. Public Const WH_MOUSE As Long = 7   
  31. Public Const HC_SYSMODALOFF = 5   
  32. Public Const HC_SYSMODALON = 4   
  33. Public Const HC_SKIP = 2   
  34. Public Const HC_GETNEXT = 1   
  35. Public Const HC_ACTION = 0   
  36. Public Const HC_NOREMOVE As Long = 3   
  37. Public Const WM_LBUTTONDBLCLK As Long = &H203   
  38. Public Const WM_LBUTTONDOWN As Long = &H201   
  39. Public Const WM_LBUTTONUP As Long = &H202   
  40. Public Const WM_MBUTTONDBLCLK As Long = &H209   
  41. Public Const WM_MBUTTONDOWN As Long = &H207   
  42. Public Const WM_MBUTTONUP As Long = &H208   
  43. Public Const WM_RBUTTONDBLCLK As Long = &H206   
  44. Public Const WM_RBUTTONDOWN As Long = &H204   
  45. Public Const WM_RBUTTONUP As Long = &H205   
  46. Public Const WM_MOUSEMOVE As Long = &H200   
  47. Public Const WM_MOUSEWHEEL As Long = &H20A   
  48. Public Declare Function PostMessage Lib 
    "user32" Alias "PostMessageA" (ByVal hwnd 
    As Long, ByVal wMsg As Long, ByVal wParam 
    As Long, ByVal lParam As Long) As Long   
  49. Public Const MK_RBUTTON As Long = &H2   
  50. Public Declare Function ScreenToClient 
    Lib "user32" (ByVal hwnd As Long, lpPoint
     As POINTAPI) As Long   
  51. Public Declare Function GetAsyncKeyState 
    Lib "user32" (ByVal vKey As Long) As Integer   
  52. Public Const VK_LBUTTON As Long = &H1   
  53. Public Const VK_RBUTTON As Long = &H2   
  54. Public Const VK_MBUTTON As Long = &H4   
  55. Dim mPt As POINTAPI   
  56. Const ptGap As Single = 5 * 5   
  57. Dim preDir As Long   
  58. Dim mouseEventDsp As String   
  59. Dim eventLength As Long   
  60. '######### mouse hook #############   
  61. Public Sub InstallMouseHook()   
  62. hMouseHook = SetWindowsHookEx(WH_MOUSE, 
    AddressOf MouseHookProc, _   
  63. App.hInstance, App.ThreadID)   
  64. End Sub   
  65. Public Function MouseHookProc(ByVal iCode 
    As Long, ByVal wParam As Long, ByVal 
    lParam As Long) As Long   
  66. Dim Cancel As Boolean   
  67. Cancel = False   
  68. On Error GoTo due   
  69. Dim i&   
  70. Dim nMouseInfo As MOUSEHOOKSTRUCT   
  71. Dim tHWindowFromPoint As Long   
  72. Dim tpt As POINTAPI   
  73. If iCode = HC_ACTION Then   
  74. CopyMemory nMouseInfo, ByVal lParam, 
    Len(nMouseInfo)   
  75. tpt = nMouseInfo.pt   
  76. ScreenToClient nMouseInfo.hwnd, tpt   
  77. 'Debug.Print tpt.X, tpt.Y   
  78. If nMouseInfo.wHitTestCode = 1 Then   
  79. Select Case wParam   
  80. Case WM_RBUTTONDOWN   
  81. mPt = nMouseInfo.pt   
  82. preDir = -1   
  83. mouseEventDsp = ""   
  84. Cancel = True   
  85. Case WM_RBUTTONUP   
  86. Debug.Print mouseEventDsp   
  87. Cancel = True   
  88. Case WM_MOUSEMOVE   
  89. If vkPress(VK_RBUTTON) Then   
  90. Call GetMouseEvent(nMouseInfo.pt)   
  91. End If   
  92. End Select   
  93. End If   
  94. End If   
  95. If Cancel Then   
  96. MouseHookProc = 1   
  97. Else   
  98. MouseHookProc = CallNextHookEx(hMouseHook,
     iCode, wParam, lParam)   
  99. End If   
  100. Exit Function   
  101. due:   
  102. End Function   
  103. Public Sub UninstallMouseHook()   
  104. If hMouseHook <> 0 Then   
  105. Call UnhookWindowsHookEx(hMouseHook)   
  106. End If   
  107. hMouseHook = 0   
  108. End Sub   
  109. Public Function vkPress(vkcode As Long) As Boolean   
  110. If (GetAsyncKeyState(vkcode) And &H8000) <> 0 Then   
  111. vkPress = True   
  112. Else   
  113. vkPress = False   
  114. End If   
  115. End Function   
  116. Public Function GetMouseEvent(nPt As POINTAPI) As Long   
  117. Dim cx&, cy&   
  118. Dim rtn&   
  119. rtn = -1   
  120. cx = nPt.X - mPt.X: cy = -(nPt.Y - mPt.Y)   
  121. If cx * cx + cy * cy > ptGap Then   
  122. If cx > 0 And Abs(cy) <= cx Then   
  123. rtn = 0   
  124. ElseIf cy > 0 And Abs(cx) <= cy Then   
  125. rtn = 1   
  126. ElseIf cx < 0 And Abs(cy) <= Abs(cx) Then   
  127. rtn = 2   
  128. ElseIf cy < 0 And Abs(cx) <= Abs(cy) Then   
  129. rtn = 3   
  130. End If   
  131. mPt = nPt   
  132. If preDir <> rtn Then   
  133. mouseEventDspmouseEventDsp = mouseEventDsp
     & DebugDir(rtn)   
  134. preDir = rtn   
  135. End If   
  136. End If   
  137. GetMouseEvent = rtn   
  138. End Function   
  139. Public Function DebugDir(nDir&) As String   
  140. Dim tStr$   
  141. Select Case nDir   
  142. Case 0   
  143. tStr = "右"   
  144. Case 1   
  145. tStr = "上"   
  146. Case 2   
  147. tStr = "左"   
  148. Case 3   
  149. tStr = "下"   
  150. Case Else   
  151. tStr = "無"   
  152. End Select   
  153. Debug.Print Timer, tStr   
  154. DebugDir = tStr   
  155. End Function  

 

運行VB.NET鼠標(biāo)手勢的程序后,在程序窗口上,按著右鍵移動鼠標(biāo),Immediate Window就會顯示出鼠標(biāo)移動的軌跡了.

責(zé)任編輯:曹凱 來源: 編程入門網(wǎng)
相關(guān)推薦

2010-01-18 16:33:57

VB.NET加密文件

2010-01-07 13:40:50

VB.NET讀取XML

2010-01-14 16:04:32

VB.NET顯示時間

2010-01-18 10:26:19

VB.NET中心旋轉(zhuǎn)圖

2010-01-18 16:41:47

VB.NET用戶登錄頁

2010-01-15 19:04:09

2010-01-22 11:02:30

VB.NET創(chuàng)建新變量

2010-01-13 15:52:59

VB.NET浮動窗體

2010-01-22 13:16:05

VB.NET初始化數(shù)組

2010-01-13 16:45:44

VB.NET刪除控件

2010-01-11 15:31:04

VB.NET拖動窗體

2010-01-08 18:31:45

VB.NET歷史菜單

2010-01-22 16:27:19

VB.NET關(guān)于對話框

2010-01-15 19:24:42

2010-01-19 15:30:44

VB.NET比較運算符

2010-01-13 10:25:30

VB.NET文件夾操作

2010-01-07 10:02:53

Flash控制VB.N

2010-01-11 16:04:10

VB.NET使用wit

2010-01-13 14:41:18

VB.NET列出目錄內(nèi)

2010-01-18 19:36:52

VB.NET調(diào)整控件
點贊
收藏

51CTO技術(shù)棧公眾號