解决支持MSFlexGrid控件的鼠标滚轮问题时出现的Bug!100分望各位高手出手相救!!!!
我用以下办法来解决支持MSFlexGrid控件的鼠标滚轮问题,但是当MSFlexGrid显示的记录正好使得MSFlexGrid的竖向滚动条未出现,也就是记录就是这么一页.但是鼠标滚轮向上滚动,记录就会被去掉(滚动到上面看不见了)!而竖向滚动条未出现(记录比较多的情况)就不会有这个问题!
不知道能否解决这个问题??
或者大家有什么更好的办法来支持MSFlexGrid控件的鼠标滚轮,可以克服以上问题!我把我的源码附上,恳请各位高手献技献策!
模块中:
Option Explicit
Public Const GWL_WNDPROC = (-4)
Public Const WM_COPYDATA = &H4A
Public Const WM_MOUSEWHEEL = &H20A
Public Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End Type
Public 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
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Sub RtlMoveMemory Lib "kernel32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Public prevWndProc As Long
Public Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_MOUSEWHEEL Then
With Form1.MSFlexGrid1
If wParam = -7864320 Then
.TopRow = .TopRow + 1'向下滚动
ElseIf wParam = 7864320 Then
If .TopRow > 1 Then
.TopRow = .TopRow - 1'向上滚动
End If
End If
End With
Else
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End If
End Function
所在窗体:
Private Sub Form_Load()
'表格窗口消息
prevWndProc = GetWindowLong(MSFlexGrid1.hWnd, GWL_WNDPROC)
Call SetWindowLong(MSFlexGrid1.hWnd, GWL_WNDPROC, AddressOf WndProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
'恢复窗口程序
Call SetWindowLong(MSFlexGrid1.hWnd, GWL_WNDPROC, prevWndProc)
End Sub
问题点数:0、回复次数:3Top
1 楼yinweihong()回复于 2005-05-02 10:25:32 得分 0
试下这个:http://blog.csdn.net/yinweihong/archive/2004/09/25/116638.aspxTop
2 楼MmMVP(杜霖:(现在是DooDu的马甲。。))回复于 2005-05-02 11:40:09 得分 0
楼上的能用,试了可以Top
3 楼wuxuetie(三天)回复于 2005-05-02 13:51:32 得分 0
还是和我的代码效果一样!达不到效果!Top




