在MSFlexGrid控件中内容有多页,让它来支持滑轮翻页?

解决方案 »

  1.   

    有增做个一个对datagrid使用鼠标中键滚动的,也能用于msflexgrid,基中需要改变的地方都有说明:
    窗体中有一datagrid,名为grdHistory:
    Private Sub Form_Load()
    ‘准备   
    ‘’’‘向grdHistory装载内容的代码
    Hook Me.hwnd, grdHistory
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
       UnHook Me.hwnd
    End Sub
    ‘标准模块中:
    Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
     
    Public Const GWL_WNDPROC = -4
    Public Const SPI_GETWHEELSCROLLLINES = 104
    Public Const WM_MOUSEWHEEL = &H20A
    Public WHEEL_SCROLL_LINES   As Long
     
    Global lpPrevWndProc   As Long
     
    Public Sub Hook(ByVal hwnd As Long, ByVal objGrid As DataGrid)
       lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
        
       '获取"控制面板"中的滚动行数值
       Call SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, WHEEL_SCROLL_LINES, 0)
       
       ‘对于MSGFlexGrid,下面三行应更改
    If WHEEL_SCROLL_LINES > objGrid.VisibleRows Then
          WHEEL_SCROLL_LINES = objGrid.VisibleRows
       End If
    End Sub
     
    Public Sub UnHook(ByVal hwnd As Long)
        SetWindowLong hwnd, GWL_WNDPROC, lpPrevWndProc
    End Sub
     
    Private Function WindowProc(ByVal hw As Long, _
    ByVal uMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long   Dim wKeys As Integer
       Dim wzDelta As Integer
       
       Select Case uMsg
           Case WM_MOUSEWHEEL
               With frmHistory.grdHistory
                   wKeys = LOWORD(wParam)
                   wzDelta = HIWORD(wParam)
                  '判断坐标是否在Form1.grdDataGrid窗口内
                   If wKeys = 16 Then
                      '滚动键按下,水平滚动grdDataGrid
       ‘对于MSGFlexGrid,水平滚动可通过其改变其leftcol现实                    If Sgn(wzDelta) = 1 Then
                                .Scroll -1, 0
                        Else
                                .Scroll 1, 0
                        End If
                    Else
                      '鼠标按下时垂直滚动
    ‘对于MSGFlexGrid,水平滚动可通过其改变其toprow现实
                      If Sgn(wzDelta) = 1 Then
                          .Scroll 0, 0 - WHEEL_SCROLL_LINES
                            Else
                          .Scroll 0, WHEEL_SCROLL_LINES
                      End If
                   End If
            End With
        
       Case Else
          WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
        
       End Select
     
    End Function
      
    Public Function HIWORD(LongIn As Long) As Integer
    '  取出32位值的高16位
       HIWORD = (LongIn And &HFFFF0000) \ &H10000
    End Function
     
    Public Function LOWORD(LongIn As Long) As Integer
       '  取出32位值的低16位
       LOWORD = LongIn And &HFFFF&
    End Function
      

  2.   

    xinliangyu(yxl) 有没有msflexgrid的例子,你的没调试不出来