再话在MSHFLEXGRID(vb6)中怎么解决鼠标滚轮的滚动问题?

hn123 2005-04-26 12:09:34
这是 lxcc(虫子|专注于抢分) 大哥发的贴子,很好用,但是有一个问题,怎么用在多个窗体中,现在只能用在一个窗体中。急。
如果方便请加我的msn :v_ic@msn.com

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.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)
End Sub

Private Sub Form_Unload(Cancel As Integer)
'恢复窗口程序
Call SetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC, prevWndProc1)
End Sub
...全文
577 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
VBDN 2005-08-27
  • 打赏
  • 举报
回复
http://powerbasic.cn/Products/MouseWheelForDataGrid.htm
叶帆 2005-08-20
  • 打赏
  • 举报
回复
这是我写的一个控件,可以参考一下
http://www.bjjr.com.cn/yefan/sourcecode/mmouse.rar
tangqijun199 2005-08-18
  • 打赏
  • 举报
回复
不知道楼主是用什么办法,能告诉我吗?
wenky_2000 2005-08-18
  • 打赏
  • 举报
回复
VSFLEXGRID好用

这问题都不用想

vansoft 2005-08-18
  • 打赏
  • 举报
回复
把窗體和控件做參數就可以.
ljhdi 2005-04-26
  • 打赏
  • 举报
回复
我是这样解决的
写在Form_Activate事件里

把Call SetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC, prevWndProc1)写在一个函数里面调用
然后其它窗体的unload事件里都要调用frmMain.frmLostAct
虽然都能实现滚轮
但总是感觉不爽
后来换成了vsflexgrid控件
留下些什么 2005-04-26
  • 打赏
  • 举报
回复
写成控件就可以了
hn123 2005-04-26
  • 打赏
  • 举报
回复
我用最简单的办法搞定了,太高兴了。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧