Option ExplicitPrivate m_intOffsetRows As IntegerPrivate Sub Form_Load() Dim i As Integer MSHFlexGrid1.FixedCols = 0 MSHFlexGrid1.FixedRows = 1 MSHFlexGrid1.FormatString = "<SubItem1 |<SubItem2 |<SubItem3 |<SubItem4 |<SubItem5 |<SubItem6 " MSHFlexGrid1.Rows = 50 MSHFlexGrid1.SelectionMode = flexSelectionByRow MSHFlexGrid1.Move 100, 100, 5000, 3000 MSHFlexGrid1_EnterCell End SubPrivate Sub MSHFlexGrid1_EnterCell() Dim i As Integer MSHFlexGrid1.Redraw = False For i = MSHFlexGrid1.Cols - 1 To 0 Step -1 MSHFlexGrid1.Col = i MSHFlexGrid1.CellBackColor = vbHighlight Next MSHFlexGrid1.Redraw = True m_intOffsetRows = MSHFlexGrid1.Row - MSHFlexGrid1.TopRow End SubPrivate Sub MSHFlexGrid1_LeaveCell() Dim i As Integer MSHFlexGrid1.Redraw = False For i = MSHFlexGrid1.Cols - 1 To 0 Step -1 MSHFlexGrid1.Col = i MSHFlexGrid1.CellBackColor = MSHFlexGrid1.BackColor Next MSHFlexGrid1.Redraw = True End SubPrivate Sub MSHFlexGrid1_Scroll() MSHFlexGrid1_LeaveCell MSHFlexGrid1.Row = MSHFlexGrid1.TopRow + m_intOffsetRows MSHFlexGrid1_EnterCell End Sub
首先在模块里面Public Const GWL_WNDPROC = (-4) Public Const WM_COMMAND = &H111 Public Const WM_MBUTTONDOWN = &H207 Public Const WM_MBUTTONUP = &H208 Public Const WM_MOUSEWHEEL = &H20APublic Oldwinproc As Long''这个公共变量用来保存句柄的Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Public Function FlexScroll(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '支持滚轮的滚动 Select Case wMsg
Case WM_MOUSEWHEEL
Select Case wParam Case -7864320 '向下滚 SendKeys "{PGDN}" Case 7864320 '向上滚 SendKeys "{PGUP}" End Select
Dim i As Integer
MSHFlexGrid1.FixedCols = 0
MSHFlexGrid1.FixedRows = 1
MSHFlexGrid1.FormatString = "<SubItem1 |<SubItem2 |<SubItem3 |<SubItem4 |<SubItem5 |<SubItem6 "
MSHFlexGrid1.Rows = 50
MSHFlexGrid1.SelectionMode = flexSelectionByRow
MSHFlexGrid1.Move 100, 100, 5000, 3000
MSHFlexGrid1_EnterCell
End SubPrivate Sub MSHFlexGrid1_EnterCell()
Dim i As Integer
MSHFlexGrid1.Redraw = False
For i = MSHFlexGrid1.Cols - 1 To 0 Step -1
MSHFlexGrid1.Col = i
MSHFlexGrid1.CellBackColor = vbHighlight
Next
MSHFlexGrid1.Redraw = True
m_intOffsetRows = MSHFlexGrid1.Row - MSHFlexGrid1.TopRow
End SubPrivate Sub MSHFlexGrid1_LeaveCell()
Dim i As Integer
MSHFlexGrid1.Redraw = False
For i = MSHFlexGrid1.Cols - 1 To 0 Step -1
MSHFlexGrid1.Col = i
MSHFlexGrid1.CellBackColor = MSHFlexGrid1.BackColor
Next
MSHFlexGrid1.Redraw = True
End SubPrivate Sub MSHFlexGrid1_Scroll()
MSHFlexGrid1_LeaveCell
MSHFlexGrid1.Row = MSHFlexGrid1.TopRow + m_intOffsetRows
MSHFlexGrid1_EnterCell
End Sub
Public Const WM_COMMAND = &H111
Public Const WM_MBUTTONDOWN = &H207
Public Const WM_MBUTTONUP = &H208
Public Const WM_MOUSEWHEEL = &H20APublic Oldwinproc As Long''这个公共变量用来保存句柄的Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Public Function FlexScroll(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'支持滚轮的滚动
Select Case wMsg
Case WM_MOUSEWHEEL
Select Case wParam Case -7864320 '向下滚
SendKeys "{PGDN}" Case 7864320 '向上滚
SendKeys "{PGUP}" End Select
End Select
FlexScroll = CallWindowProc(Oldwinproc, hWnd, wMsg, wParam, lParam)
End Function
然后在窗体里面放一个msflexgrid
写入下面代码
Private Sub Mfg_GotFocus()
Oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)''得到原来窗体的句柄,到时候要还回去的
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf FlexScroll
End SubPrivate Sub Mfg_LostFocus()
SetWindowLong Me.hWnd, GWL_WNDPROC, Oldwinproc''在失去焦点的时候,就还回去句柄End Sub只能参考,这是原来别人写的,希望对你有帮助。