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

詳解VB.NET中鼠標(biāo)滾輪的實(shí)際應(yīng)用

開發(fā) 后端
對于VB.NET中鼠標(biāo)滾輪的使用,本文將從工控應(yīng)用方面來進(jìn)行具體闡述。希望本文能對大家有所幫助。

本文將從現(xiàn)實(shí)開發(fā)的角度為大家講解VB.NET鼠標(biāo)滾輪的使用,希望這樣實(shí)用的文章能對大家有所幫助。

最近準(zhǔn)備寫一系列和工控、設(shè)備模擬仿真PC機(jī)軟件有關(guān)的文章,主要是對若干年和軟件有關(guān)的工作進(jìn)行總結(jié),感興趣的朋友可以關(guān)注一下。

這一系列的文章主要以航空儀表模擬、步進(jìn)電機(jī)控制、PLC交互和LED焊機(jī)的精確定位焊接控制等等作為例子,這些例子主要都是通過VB6.0實(shí)現(xiàn)的,但本人將以重原理輕語言的方式來進(jìn)行敘述。

第一個(gè)例子很簡單,就是一個(gè)和鼠標(biāo)滾輪控制有關(guān)的例子,鼠標(biāo)滾輪的控制在原來的VB6.0中可是不好控制的,呵呵,后續(xù)的例子正在整理中。

鼠標(biāo)滾輪能給系統(tǒng)的使用帶來很大便利,如使用滾輪移動(dòng)選擇這項(xiàng),但在VB中的一些常用控件(如:文件框、列表框等)中沒有提供鼠標(biāo)滾輪滾動(dòng)選擇的效果。現(xiàn)將自己寫的鼠標(biāo)滾輪特效實(shí)現(xiàn)代碼分享給大家:

本例子就是一個(gè)對Win32 API的調(diào)用,達(dá)到對ListBox、PictureBox等的鼠標(biāo)滾輪控制。首先,申明windows API調(diào)用,將其放在模塊modWheel中,以供用戶控件使用。原理很簡單,通過鼠標(biāo)滾輪可以對如下白色的橫線進(jìn)行控制,效果圖如下:

效果圖

相關(guān)代碼如下:

鼠標(biāo)滾輪處理模塊(modWheel)

  1. Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _  
  2.      (pDest As Any, pSource As Any, ByVal ByteLen As Long)  
  3.  
  4. Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _  
  5.      (ByVal hWnd As LongByVal nIndex As LongAs Long 
  6. Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _  
  7.      (ByVal hWnd As LongByVal nIndex As Long, _  
  8.      ByVal dwNewLong As LongAs Long 
  9. Public Const GWL_WNDPROC = (-4)  
  10. Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _  
  11.      (ByVal lpPrevWndFunc As LongByVal hWnd As Long, _  
  12.      ByVal Msg As LongByVal wParam As Long, _  
  13.      ByVal lParam As LongAs Long 
  14. Declare Function SetProp Lib "user32" Alias "SetPropA" _  
  15.      (ByVal hWnd As LongByVal lpString As String, _  
  16.      ByVal hData As LongAs Long 
  17. Declare Function GetProp Lib "user32" Alias "GetPropA" _  
  18.      (ByVal hWnd As LongByVal lpString As StringAs Long 
  19. Declare Function RemoveProp Lib "user32" Alias "RemovePropA" _  
  20.      (ByVal hWnd As LongByVal lpString As StringAs Long 
  21. Declare Function GetParent Lib "user32" (ByVal hWnd As LongAs Long 
  22.  
  23. Public Const WM_MOUSEWHEEL = &H20A  
  24. Public Const WM_MOUSELAST = &H20A  
  25. Public Const WHEEL_DELTA = 120  
  26.  
  27.  
  28. Public Function HIWORD(LongIn As LongAs Integer 
  29.  
  30.    HIWORD = (LongIn And &HFFFF0000) \ &H10000  
  31. End Function 
  32. Public Function MWheelProc(ByVal hWnd As Long, _  
  33. ByVal wMsg As LongByVal wParam As Long, _  
  34. ByVal lParam As LongAs Long 
  35.  
  36.      Dim OldProc As Long 
  37.      Dim CtlWnd As Long 
  38.      Dim CtlPtr As Long 
  39.      Dim IntObj As Object 
  40.      Dim MWObject As MWheel  
  41.  
  42.      CtlWnd = GetProp(hWnd, "WheelWnd")  
  43.      CtlPtr = GetProp(CtlWnd, "WheelPtr")  
  44.      OldProc = GetProp(CtlWnd, "OldWheelProc")  
  45.  
  46.      If wMsg = WM_MOUSEWHEEL Then 
  47.           CopyMemory IntObj, CtlPtr, 4  
  48.           Set MWObject = IntObj  
  49.           MWObject.WndProc hWnd, wMsg, wParam, lParam  
  50.           Set MWObject = Nothing 
  51.           CopyMemory IntObj, 0&, 4  
  52.           Exit Function 
  53.     End If 
  54.  MWheelProc = CallWindowProc(OldProc, hWnd, wMsg, wParam, lParam)  
  55. End Function 
  56.  
  57. Public Sub Subclass(MWCtl As MWheel, ParentWnd As Long)  
  58.      If GetProp(MWCtl.hWnd, "OldWheelProc") <> 0 Then 
  59.           Exit Sub 
  60.      End If 
  61.  
  62.      SetProp MWCtl.hWnd, "OldWheelProc", _  
  63.           GetWindowLong(ParentWnd, GWL_WNDPROC)  
  64.      
  65.      SetProp MWCtl.hWnd, "WheelPtr", ObjPtr(MWCtl)  
  66.      
  67.      SetProp ParentWnd, "WheelWnd", MWCtl.hWnd  
  68.  
  69.      SetWindowLong ParentWnd, GWL_WNDPROC, AddressOf MWheelProc  
  70. End Sub 
  71.  
  72. Public Sub UnSubclass(MWCtl As MWheel, ParentWnd As Long)  
  73.      Dim OldProc As Long 
  74.  
  75.      OldProc = GetProp(MWCtl.hWnd, "OldWheelProc")  
  76.      If OldProc = 0 Then Exit Sub 
  77.     
  78.      SetWindowLong ParentWnd, GWL_WNDPROC, OldProc  
  79.      
  80.      RemoveProp ParentWnd, "WheelWnd" 
  81.      RemoveProp MWCtl.hWnd, "WheelPtr" 
  82.      RemoveProp MWCtl.hWnd, "OldWheelProc" 
  83. End Sub 

然后,定義用戶控件MWheel,實(shí)現(xiàn)對相關(guān)控件鼠標(biāo)滾輪事件的處理。 

用戶控件(MWheel)代碼

  1. Option Explicit  
  2.  
  3. Dim m_CapWnd As Long 
  4. Dim m_Subclassed As Boolean 
  5.  
  6. Event WheelScroll(Shift As Integer, zDelta As Integer, _  
  7.     X As Single, Y As Single)  
  8.  
  9. Private Sub UserControl_Resize()  
  10.      Size 32 * Screen.TwipsPerPixelX, 32 * Screen.TwipsPerPixelY  
  11. End Sub 
  12.  
  13. Public Sub DisableWheel()  
  14.      If m_CapWnd = 0 Then Exit Sub 
  15.      If m_Subclassed = False Then Exit Sub 
  16.  
  17.      UnSubclass Me, m_CapWnd  
  18.      m_Subclassed = False 
  19. End Sub 
  20.  
  21. Public Sub EnableWheel()  
  22.      If m_CapWnd = 0 Then Exit Sub 
  23.      m_Subclassed = True 
  24.      Subclass Me, m_CapWnd  
  25. End Sub 
  26.  
  27. Friend Property Get hWnd() As Long 
  28.      hWnd = UserControl.hWnd  
  29. End Property 
  30.  
  31. Public Property Get hWndCapture() As Long 
  32.      hWndCapture = m_CapWnd  
  33. End Property 
  34. Public Property Let hWndCapture(ByVal vNewValue As Long)  
  35.      m_CapWnd = vNewValue  
  36. End Property 
  37.  
  38. Friend Sub WndProc(ByVal hWnd As Long, _  
  39. ByVal wMsg As LongByVal wParam As LongByVal lParam As Long)  
  40.      Dim wShift As Integer 
  41.      Dim wzDelta As Integer 
  42.      Dim wX As Single, wY As Single     
  43.      wzDelta = HIWORD(wParam)  
  44.      
  45.      wY = HIWORD(lParam)  
  46.  
  47.      RaiseEvent WheelScroll(wShift, wzDelta, wX, wY)  
  48. End Sub 

最后,就可以將定義的用戶控件用在vb窗體編程中,實(shí)現(xiàn)對鼠標(biāo)滾輪事件的監(jiān)聽和處理,測試主窗體如下:

主窗體(Form1)代碼

  1. Option Explicit  
  2. Dim KAs As Long 
  3. Dim KA1 As Long 
  4. Dim KA2 As Long 
  5. Private Sub Picture1_Click()  
  6. MWheel1.hWndCapture = Picture1.hWnd  
  7. MWheel1.EnableWheel  
  8. End Sub 
  9. Private Sub List1_Click()  
  10. MWheel2.hWndCapture = List1.hWnd  
  11. MWheel2.EnableWheel  
  12. KA1 = List1.ListCount  
  13. End Sub 
  14. Private Sub File1_Click()  
  15. MWheel3.hWndCapture = File1.hWnd  
  16. MWheel3.EnableWheel  
  17. KA1 = File1.ListCount  
  18. End Sub 
  19. Private Sub MWheel2_WheelScroll(Shift As Integer, zDelta As Integer, X As Single, Y As Single)  
  20.  
  21. If KAs > 0 Then 
  22. If zDelta = 120 Then 
  23. KAs = KAs - 1  
  24. List1.ListIndex = KAs  
  25. End If 
  26. End If 
  27. If KAs < KA1 - 1 Then 
  28. If zDelta = -120 Then 
  29. KAs = KAs + 1  
  30. List1.ListIndex = KAs  
  31. End If 
  32. End If 
  33. End Sub 
  34. Private Sub MWheel1_WheelScroll(Shift As Integer, zDelta As Integer, X As Single, Y As Single)  
  35.  
  36. If zDelta = 120 Then 
  37. KA2 = KA2 - 5  
  38. Line1.Y1 = KA2  
  39. Line1.Y2 = KA2  
  40. End If 
  41. If zDelta = -120 Then 
  42. KA2 = KA2 + 5  
  43. Line1.Y1 = KA2  
  44. Line1.Y2 = KA2  
  45.  
  46. End If 
  47. End Sub 
  48. Private Sub MWheel3_WheelScroll(Shift As Integer, zDelta As Integer, X As Single, Y As Single)  
  49.  
  50. If KAs > 0 Then 
  51. If zDelta = 120 Then 
  52. KAs = KAs - 1  
  53. File1.ListIndex = KAs  
  54. End If 
  55. End If 
  56. If KAs < KA1 - 1 Then 
  57. If zDelta = -120 Then 
  58. KAs = KAs + 1  
  59. File1.ListIndex = KAs  
  60. End If 
  61. End If 
  62. End Sub 

代碼下載:http://files.cnblogs.com/lvjinjie/VB鼠標(biāo)滾動(dòng)輪應(yīng)用案例.rar

【編輯推薦】

  1. VB.NET數(shù)據(jù)并發(fā)性具體處理方式
  2. VB.NET菜單組件的實(shí)現(xiàn)方案
  3. VB.NET運(yùn)算符重載強(qiáng)大功能介紹
  4. VB.NET關(guān)于對話框制作技巧分享
  5. VB.NET事件訪問器特性介紹

原文標(biāo)題:VB鼠標(biāo)滾輪的應(yīng)用實(shí)現(xiàn)

鏈接:http://www.cnblogs.com/lvjinjie/archive/2010/02/04/1660810.html

 

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2010-01-08 18:02:33

VB.NET事件

2010-01-14 10:35:34

VB.NET指針

2010-01-07 15:57:02

VB.NET ForEach

2010-01-11 16:15:13

VB.NET枚舉功能

2010-01-07 18:17:00

VB.NET連接SAP

2010-01-15 13:30:53

VB.NET Tool

2010-01-19 15:21:55

VB.NET區(qū)域性

2010-01-18 17:37:32

VB.NET文本框處理

2010-01-21 17:34:48

VB.NET Bool

2010-01-12 18:35:43

VB.NET Stru

2009-10-20 17:38:54

VB.NET Comp

2010-01-12 18:40:22

VB.NET Form

2010-01-18 19:04:29

VB.NET組件疊加

2010-01-19 16:55:46

VB.NET聲明語句

2010-01-07 15:42:57

VB.NET WhilEnd While循環(huán)

2010-01-18 18:50:26

VB.NET鼠標(biāo)手勢

2010-01-12 16:20:44

VB.NET類

2009-10-09 15:59:41

VB.NET對象

2010-01-08 15:22:22

VB.NET局部變量

2011-05-20 16:34:35

VB.NET
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久亚洲一区二区三区四区 | 欧美中文字幕在线观看 | 国产午夜精品一区二区三区在线观看 | 欧美爱爱视频 | 日本不卡在线视频 | 欧美日韩久 | 亚洲高清成人在线 | 精品国产一区二区三区性色av | 日本不卡一区 | 黄色一级片aaa| 精品真实国产乱文在线 | 亚洲成人在线网 | 蜜桃官网 | 网站国产 | 欧美一区二区在线观看视频 | 亚洲视频一区在线 | 国产精品久久久久久久7电影 | 天天操人人干 | 国产成人福利在线观看 | 香蕉久久a毛片 | 欧美激情一区二区三区 | 人人澡人人射 | 99在线资源 | 精品久久不卡 | 国产日韩一区二区三免费 | 精品亚洲一区二区三区四区五区 | 久久久无码精品亚洲日韩按摩 | 欧美一区二区三区在线观看视频 | 操操网站 | 日本高清不卡视频 | www久久爱 | 国产精品1区2区 | 成人av一区| 欧美一级二级在线观看 | 日本欧美在线视频 | 国产精品1区2区 | 一级片在线观看视频 | 国产精品久久久久久久三级 | 在线一区视频 | 欧美www在线观看 | av一级久久 |