如何响应鼠标滚轮呢,我需要的效果是滚轮向前滚的时候textbox里面显示zoom out, 向后滚的时候显示zoom in.我看过csdn上面的一些例子,但是由于不会用api和hook所以没看懂麻烦大家解释详细一点。过年好

解决方案 »

  1.   

    '添加一个模块module,复制粘贴如下代码:
    '此模块包含自定义窗体消息处理函数,拦截WM_MOUSEWHEEL鼠标滚轮滚动消息,做自己的处理
    '声明
    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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Const GWL_WNDPROC = (-4)
    Public Const WM_MOUSEWHEEL = &H20A
    Public PrevWndProc As LongFunction WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '写自己处理鼠标滚动的事件,这里让Form上下滚动
    Dim t(0 To 1) As Integer
    If uMsg = WM_MOUSEWHEEL Then
        If wParam < 0 Then '向后滚
            Form1.Text1.Text = "zoom in"
        Else '向前滚
            Form1.Text1.Text = "zoom out"
        End If
    Else
        WndProc = CallWindowProc(PrevWndProc, hwnd, uMsg, wParam, lParam) '让Windows处理其他事件
    End If
    End Function
    '窗体中的代码
    Private Sub Form_Load()
        '使自定义消息处理函数WndProc成为窗体的消息处理函数
        PrevWndProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Dim lResult As Long
        '窗体的消息处理函数还原为Windows默认的函数
        lResult = SetWindowLong(Me.hwnd, GWL_WNDPROC, PrevWndProc) End Sub
      

  2.   

    我给你的chm文件有写,你直接用就可以了
      

  3.   

    setwindowlong函数功能:改变指定窗口的属性,并把一个32位值(long)放在窗口附加存储空间的指定偏移位置函数原型:long SetWindowLong(
                    HWND hWnd,
                    int nIndex,
                    LONG dwNewLong
                   );
    这个你要用的时候用vb的工具里的API浏览,英文版不知道应该怎么说,需要加载win32api.txt文件里面找这个函数就ok了不需要自己打了
      

  4.   

    hWnd 窗口句柄或间接给出的窗口所属的类
    nIndex 指定要设置的大于等于0的偏移值
    GWL_WNDPROC: 为窗口过程设定一个新的地址CallWindowProc
    函数过程:将消息传送给指定的窗口程序
      

  5.   

    http://powerbasic.cn/Products/MouseWheelForDataGrid.htm