成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

1.什么是鼠標手勢:

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

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

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

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

還要說明一下,

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

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

新建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鼠標手勢的程序后,在程序窗口上,按著右鍵移動鼠標,Immediate Window就會顯示出鼠標移動的軌跡了.

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

2010-01-18 16:33:57

VB.NET加密文件

2010-01-14 16:04:32

VB.NET顯示時間

2010-01-18 16:41:47

VB.NET用戶登錄頁

2010-01-18 10:26:19

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

2010-01-07 13:40:50

VB.NET讀取XML

2010-01-22 11:02:30

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

2010-01-13 15:52:59

VB.NET浮動窗體

2010-01-15 19:04:09

2010-01-22 13:16:05

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

2010-01-11 15:31:04

VB.NET拖動窗體

2010-01-13 16:45:44

VB.NET刪除控件

2010-01-08 18:31:45

VB.NET歷史菜單

2010-01-07 10:02:53

Flash控制VB.N

2010-01-11 16:04:10

VB.NET使用wit

2010-01-13 10:25:30

VB.NET文件夾操作

2010-01-15 19:24:42

2010-01-22 16:27:19

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

2010-01-19 15:30:44

VB.NET比較運算符

2010-01-08 18:37:08

VB.NET顯示圖片

2010-01-18 19:36:52

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

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

主站蜘蛛池模板: 亚洲a一区二区 | 99在线资源| 香蕉婷婷| 精品一区二区三区免费视频 | 亚洲aⅴ精品 | 国产精品毛片一区二区三区 | 久久精品99| 久久免费精品视频 | 精品国产乱码久久久久久丨区2区 | 中国一级特黄真人毛片 | 亚洲精品国产综合区久久久久久久 | 欧美男人天堂 | 中文字幕成人av | 午夜免费在线观看 | 国产综合精品一区二区三区 | 天堂在线1 | 国产一级免费在线观看 | 欧美成人a∨高清免费观看 色999日韩 | www.色.com| 午夜天堂精品久久久久 | 久久99网站| 国产91丝袜在线播放 | 亚洲欧美中文日韩在线v日本 | 国产一区二区在线播放 | 亚洲精品视频在线播放 | 2021天天躁夜夜看 | 成人免费观看视频 | 天堂网中文字幕在线观看 | 免费看国产一级特黄aaaa大片 | 国产一区二 | 日韩欧美一区二区在线播放 | 亚洲三区在线观看 | 免费视频成人国产精品网站 | 中文字幕乱码一区二区三区 | 欧美日韩精品一区 | 久久一二三区 | 国产成人91视频 | 精品久久久久久国产 | 午夜精品久久久久久久 | 欧美成人精品在线 | 精品亚洲一区二区三区 |