使MSHFlexGrid支持鼠标滚动

使MSHFlexGrid支持鼠标滚动 

以下程序放在一个公共模块中,

在窗体中的form_load事件中 写 HookWheel me.hwnd

在窗体中的form_unload事件中 写 UnHookWheel me.hwnd

在表格的GotFocus事件中 set CtlWheel=MSFlexGrid1  '( 表格名称,根据具体情况,修改这个名称)

在表格的LostFocus事件中 set CtlWheel=Nothing'( 表格名称,根据具体情况,修改这个名称)

Option Explicit

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private 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

Private Const GWL_WNDPROC   As Long = (-4)

Private Const WM_MOUSEWHEEL As Long = &H20A

Private m_OldWindowProc As Long

Public CtlWheel As Object

 

Public Sub HookWheel(ByVal frmHwnd)

    m_OldWindowProc = SetWindowLong(frmHwnd, GWL_WNDPROC, AddressOf pvWindowProc)

End Sub

 

Public Sub UnHookWheel(ByVal hwnd As Long)

    Dim lngReturnValue As Long

    lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, m_OldWindowProc)   

End Sub

 

Private Function pvWindowProc(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

    On Error GoTo errH   

    Select Case wMsg   

        Case WM_MOUSEWHEEL

            If Not CtlWheel Is Nothing Then

                 If TypeOf CtlWheel Is MSFlexGrid Then

                     With CtlWheel                   

                             Select Case wParam

                             Case Is > 0       

                                If CtlWheel.TopRow > 0 Then

                                    CtlWheel.TopRow = CtlWheel.TopRow - 1

                                End If                               

                             Case Else                              

                                CtlWheel.TopRow = CtlWheel.TopRow + 1                               

                             End Select

                      End With

                  End If                 

           End If

    End Select   

errH:   

    pvWindowProc = CallWindowProc(m_OldWindowProc, hwnd, wMsg, wParam, lParam)

End Function

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值