本文将从现实开发的角度为大家讲解VB.NET鼠标滚轮的使用,希望这样实用的文章能对大家有所帮助。

成都创新互联专注于企业营销型网站建设、网站重做改版、同德网站定制设计、自适应品牌网站建设、H5场景定制、商城网站建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为同德等各大城市提供网站开发制作服务。
最近准备写一系列和工控、设备模拟仿真PC机软件有关的文章,主要是对若干年和软件有关的工作进行总结,感兴趣的朋友可以关注一下。
这一系列的文章主要以航空仪表模拟、步进电机控制、PLC交互和LED焊机的精确定位焊接控制等等作为例子,这些例子主要都是通过VB6.0实现的,但本人将以重原理轻语言的方式来进行叙述。
第一个例子很简单,就是一个和鼠标滚轮控制有关的例子,鼠标滚轮的控制在原来的VB6.0中可是不好控制的,呵呵,后续的例子正在整理中。
鼠标滚轮能给系统的使用带来很大便利,如使用滚轮移动选择这项,但在VB中的一些常用控件(如:文件框、列表框等)中没有提供鼠标滚轮滚动选择的效果。现将自己写的鼠标滚轮特效实现代码分享给大家:
本例子就是一个对Win32 API的调用,达到对ListBox、PictureBox等的鼠标滚轮控制。首先,申明windows API调用,将其放在模块modWheel中,以供用户控件使用。原理很简单,通过鼠标滚轮可以对如下白色的横线进行控制,效果图如下:
相关代码如下:
鼠标滚轮处理模块(modWheel)
- Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
 - (pDest As Any, pSource As Any, ByVal ByteLen As Long)
 - Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
 - (ByVal hWnd As Long, ByVal nIndex As Long) As Long
 - Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
 - (ByVal hWnd As Long, ByVal nIndex As Long, _
 - ByVal dwNewLong As Long) As Long
 - Public Const GWL_WNDPROC = (-4)
 - Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
 - (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, _
 - ByVal Msg As Long, ByVal wParam As Long, _
 - ByVal lParam As Long) As Long
 - Declare Function SetProp Lib "user32" Alias "SetPropA" _
 - (ByVal hWnd As Long, ByVal lpString As String, _
 - ByVal hData As Long) As Long
 - Declare Function GetProp Lib "user32" Alias "GetPropA" _
 - (ByVal hWnd As Long, ByVal lpString As String) As Long
 - Declare Function RemoveProp Lib "user32" Alias "RemovePropA" _
 - (ByVal hWnd As Long, ByVal lpString As String) As Long
 - Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
 - Public Const WM_MOUSEWHEEL = &H20A
 - Public Const WM_MOUSELAST = &H20A
 - Public Const WHEEL_DELTA = 120
 - Public Function HIWORD(LongIn As Long) As Integer
 - HIWORD = (LongIn And &HFFFF0000) \ &H10000
 - End Function
 - Public Function MWheelProc(ByVal hWnd As Long, _
 - ByVal wMsg As Long, ByVal wParam As Long, _
 - ByVal lParam As Long) As Long
 - Dim OldProc As Long
 - Dim CtlWnd As Long
 - Dim CtlPtr As Long
 - Dim IntObj As Object
 - Dim MWObject As MWheel
 - CtlWnd = GetProp(hWnd, "WheelWnd")
 - CtlPtr = GetProp(CtlWnd, "WheelPtr")
 - OldProc = GetProp(CtlWnd, "OldWheelProc")
 - If wMsg = WM_MOUSEWHEEL Then
 - CopyMemory IntObj, CtlPtr, 4
 - Set MWObject = IntObj
 - MWObject.WndProc hWnd, wMsg, wParam, lParam
 - Set MWObject = Nothing
 - CopyMemory IntObj, 0&, 4
 - Exit Function
 - End If
 - MWheelProc = CallWindowProc(OldProc, hWnd, wMsg, wParam, lParam)
 - End Function
 - Public Sub Subclass(MWCtl As MWheel, ParentWnd As Long)
 - If GetProp(MWCtl.hWnd, "OldWheelProc") <> 0 Then
 - Exit Sub
 - End If
 - SetProp MWCtl.hWnd, "OldWheelProc", _
 - GetWindowLong(ParentWnd, GWL_WNDPROC)
 - SetProp MWCtl.hWnd, "WheelPtr", ObjPtr(MWCtl)
 - SetProp ParentWnd, "WheelWnd", MWCtl.hWnd
 - SetWindowLong ParentWnd, GWL_WNDPROC, AddressOf MWheelProc
 - End Sub
 - Public Sub UnSubclass(MWCtl As MWheel, ParentWnd As Long)
 - Dim OldProc As Long
 - OldProc = GetProp(MWCtl.hWnd, "OldWheelProc")
 - If OldProc = 0 Then Exit Sub
 - SetWindowLong ParentWnd, GWL_WNDPROC, OldProc
 - RemoveProp ParentWnd, "WheelWnd"
 - RemoveProp MWCtl.hWnd, "WheelPtr"
 - RemoveProp MWCtl.hWnd, "OldWheelProc"
 - End Sub
 
然后,定义用户控件MWheel,实现对相关控件鼠标滚轮事件的处理。
用户控件(MWheel)代码
- Option Explicit
 - Dim m_CapWnd As Long
 - Dim m_Subclassed As Boolean
 - Event WheelScroll(Shift As Integer, zDelta As Integer, _
 - X As Single, Y As Single)
 - Private Sub UserControl_Resize()
 - Size 32 * Screen.TwipsPerPixelX, 32 * Screen.TwipsPerPixelY
 - End Sub
 - Public Sub DisableWheel()
 - If m_CapWnd = 0 Then Exit Sub
 - If m_Subclassed = False Then Exit Sub
 - UnSubclass Me, m_CapWnd
 - m_Subclassed = False
 - End Sub
 - Public Sub EnableWheel()
 - If m_CapWnd = 0 Then Exit Sub
 - m_Subclassed = True
 - Subclass Me, m_CapWnd
 - End Sub
 - Friend Property Get hWnd() As Long
 - hWnd = UserControl.hWnd
 - End Property
 - Public Property Get hWndCapture() As Long
 - hWndCapture = m_CapWnd
 - End Property
 - Public Property Let hWndCapture(ByVal vNewValue As Long)
 - m_CapWnd = vNewValue
 - End Property
 - Friend Sub WndProc(ByVal hWnd As Long, _
 - ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
 - Dim wShift As Integer
 - Dim wzDelta As Integer
 - Dim wX As Single, wY As Single
 - wzDelta = HIWORD(wParam)
 - wY = HIWORD(lParam)
 - RaiseEvent WheelScroll(wShift, wzDelta, wX, wY)
 - End Sub
 
最后,就可以将定义的用户控件用在vb窗体编程中,实现对鼠标滚轮事件的监听和处理,测试主窗体如下:
主窗体(Form1)代码
- Option Explicit
 - Dim KAs As Long
 - Dim KA1 As Long
 - Dim KA2 As Long
 - Private Sub Picture1_Click()
 - MWheel1.hWndCapture = Picture1.hWnd
 - MWheel1.EnableWheel
 - End Sub
 - Private Sub List1_Click()
 - MWheel2.hWndCapture = List1.hWnd
 - MWheel2.EnableWheel
 - KA1 = List1.ListCount
 - End Sub
 - Private Sub File1_Click()
 - MWheel3.hWndCapture = File1.hWnd
 - MWheel3.EnableWheel
 - KA1 = File1.ListCount
 - End Sub
 - Private Sub MWheel2_WheelScroll(Shift As Integer, zDelta As Integer, X As Single, Y As Single)
 - If KAs > 0 Then
 - If zDelta = 120 Then
 - KAs = KAs - 1
 - List1.ListIndex = KAs
 - End If
 - End If
 - If KAs < KA1 - 1 Then
 - If zDelta = -120 Then
 - KAs = KAs + 1
 - List1.ListIndex = KAs
 - End If
 - End If
 - End Sub
 - Private Sub MWheel1_WheelScroll(Shift As Integer, zDelta As Integer, X As Single, Y As Single)
 - If zDelta = 120 Then
 - KA2 = KA2 - 5
 - Line1.Y1 = KA2
 - Line1.Y2 = KA2
 - End If
 - If zDelta = -120 Then
 - KA2 = KA2 + 5
 - Line1.Y1 = KA2
 - Line1.Y2 = KA2
 - End If
 - End Sub
 - Private Sub MWheel3_WheelScroll(Shift As Integer, zDelta As Integer, X As Single, Y As Single)
 - If KAs > 0 Then
 - If zDelta = 120 Then
 - KAs = KAs - 1
 - File1.ListIndex = KAs
 - End If
 - End If
 - If KAs < KA1 - 1 Then
 - If zDelta = -120 Then
 - KAs = KAs + 1
 - File1.ListIndex = KAs
 - End If
 - End If
 - End Sub
 
代码下载:http://files.cnblogs.com/lvjinjie/VB鼠标滚动轮应用案例.rar
【编辑推荐】
                标题名称:详解VB.NET中鼠标滚轮的实际应用
                
                网页网址:http://www.csdahua.cn/qtweb/news6/504256.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网