偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

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

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

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

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

還要說(shuō)明一下,

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

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

新建Standrad EXE,添加一個(gè)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 = "無(wú)"   
  152. End Select   
  153. Debug.Print Timer, tStr   
  154. DebugDir = tStr   
  155. End Function  

 

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

責(zé)任編輯:曹凱 來(lái)源: 編程入門(mén)網(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顯示時(shí)間

2010-01-18 10:26:19

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

2010-01-18 16:41:47

VB.NET用戶登錄頁(yè)

2010-01-15 19:04:09

2010-01-22 11:02:30

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

2010-01-13 15:52:59

VB.NET浮動(dòng)窗體

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拖動(dòng)窗體

2010-01-08 18:31:45

VB.NET歷史菜單

2010-01-11 16:04:10

VB.NET使用wit

2010-01-15 19:24:42

2010-01-22 16:27:19

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

2010-01-19 15:30:44

VB.NET比較運(yùn)算符

2010-01-13 10:25:30

VB.NET文件夾操作

2010-01-07 10:02:53

Flash控制VB.N

2010-01-18 19:36:52

VB.NET調(diào)整控件

2010-01-13 14:41:18

VB.NET列出目錄內(nèi)
點(diǎn)贊
收藏

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