在MSHFLEXGRID(vb6)中怎么解决鼠标滚轮的滚动问题中使用了前辈代码,代码在FmReplc窗体内: Const GWL_WNDPROC = (-4)
Const WM_COPYDATA = &H4A
Const WM_MOUSEWHEEL = &H20A
Private Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End TypePrivate 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 Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)Private 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 FmReplc.MSHFlexGrid1
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(MSHFlexGrid1.hWnd, GWL_WNDPROC)
Call SetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC, AddressOf WndProc)《-启动窗体就出现
俺所说问题,请高手解释一下AddressOf的详细用法及注意的地方。在线解决立即给分。
End SubPrivate Sub Form_Unload(Cancel As Integer)
'恢复窗口程序
Call SetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC, prevWndProc1)
End Sub
Const WM_COPYDATA = &H4A
Const WM_MOUSEWHEEL = &H20A
Private Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End TypePrivate 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 Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)Private 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 FmReplc.MSHFlexGrid1
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(MSHFlexGrid1.hWnd, GWL_WNDPROC)
Call SetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC, AddressOf WndProc)《-启动窗体就出现
俺所说问题,请高手解释一下AddressOf的详细用法及注意的地方。在线解决立即给分。
End SubPrivate Sub Form_Unload(Cancel As Integer)
'恢复窗口程序
Call SetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC, prevWndProc1)
End Sub
在模块中怎么处理可通用的窗体对象的传递,即WndProc函数中FmReplc
对象非特指,否则有10个窗体,那俺得写WndProc1-10个子函数。请恕俺
问得菜了些,呵呵。
俺在WndProc(,ByVal Fm As Form,...)增加一个Fm 虚参,结果行不
通。 tztz520(午夜逛街)帮忙啊。
完了Nothing。好了谢谢tztz520(午夜逛街)。