为何在DataGrid控件处于编辑状态时,WM_MOUSEWHEEL 事件无法响应?

mylzw 2004-07-16 01:20:29
用的是 http://dev.csdn.net/article/0/321.shtm 中的办法。
可是当DataGrid处于编辑状态时,此方法就无效了。
有没有什么办法解决?
...全文
161 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyhyoung 2004-07-30
  • 打赏
  • 举报
回复
幫你頂!
LGYAN 2004-07-30
  • 打赏
  • 举报
回复
给一段代码啊,要不然一点点写,写死人了
mylzw 2004-07-30
  • 打赏
  • 举报
回复
有没有更好的办法?
dongge2000 2004-07-25
  • 打赏
  • 举报
回复
上面的代码有些费资源。
dongge2000 2004-07-25
  • 打赏
  • 举报
回复
Option Explicit

Public Declare Function WindowFromPoint Lib "user32" (ByVal X As Long, ByVal y As Long) As Long
Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Public Type POINTAPI
X As Long
y As Long
End Type

Public Type DGfor3
ponX As Long
ponY As Long
MDC As Long
End Type

Public Function MouseDC() As DGfor3
On Error Resume Next
Dim Cur As POINTAPI
GetCursorPos Cur
MouseDC.MDC = WindowFromPoint(Cur.X, Cur.y)
MouseDC.ponX = Cur.X
MouseDC.ponY = Cur.y
End Function
---------------------------------------------------------------------------------
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
Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long

Public Const WM_HOTKEY = &H312
Public Const MOD_CONTROL = &H2
Public Const GWL_WNDPROC = (-4)

Public hWndLong() 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
'
End If
End Function
-------------------------------------------------------------------------------
Form Code:
Private Sub Form_Load()
Dim ret As Long
Timer1.Interval = 20
hWndLong = GetWindowLong(Mousedc.mdc.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Mousedc.mdc.hwnd, GWL_WNDPROC, AddressOf WndProc)
end sub
Private Sub Timer1_Timer()
Dim ret As Long
ret = SetWindowLong(Mousedc.mdc.hwnd, GWL_WNDPROC, hWndLong)
hWndLong = GetWindowLong(Mousedc.mdc.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Mousedc.mdc.hwnd, GWL_WNDPROC, AddressOf WndProc)
end sub
mylzw 2004-07-18
  • 打赏
  • 举报
回复
一楼说的那番话地球人都知道。~
关键是怎么处理编辑窗口?
也就是说如何让编辑窗口也能引发WM_MOUSEWHEEL 事件?
dongge2000 2004-07-17
  • 打赏
  • 举报
回复
同意一楼的。
mylzw 2004-07-17
  • 打赏
  • 举报
回复
那么怎么处理编辑窗口?
也就是说如何让编辑窗口也能引发WM_MOUSEWHEEL 事件?
  • 打赏
  • 举报
回复
学习
supergreenbean 2004-07-16
  • 打赏
  • 举报
回复
因为你在编辑状态的时候,所聚焦的是DataGrid中的一个子窗口,而你进行子类处理的是DataGrid窗口,所以就没有了滚动的响应

你要么也子类处理一下那个编辑窗口,呵呵

1,486

社区成员

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

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