datagrid控件能不能支持鼠标滚轮?

cdjl 2013-03-22 09:09:33
网上找到两个代码,但都不能用,不知什么原因。
最好说的详细一点。
...全文
232 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2013-03-23
  • 打赏
  • 举报
回复
本质上就是使用子类化拦截鼠标滚轮消息,然后自己模拟成向上与向下按键. 如果无效,除非是你代码没弄对,不然就是有安全软件阻止了,比如360.
cannywind 2013-03-23
  • 打赏
  • 举报
回复
新建一个窗体,一个模块,窗体中放入两个textbox,Text1和Text2,在窗体中写入下面的代码 Private Sub Form_Load() Text1 = 0 Text2 = 0 'È¡µÃText1¿Ø¼þµÄ¾ä±ú hwndTextBox1 = Text1.hwnd hwndTextBox2 = Text2.hwnd '±£´æText1¿Ø¼þµÄĬÈÏ´°¿ÚÏûÏ¢´¦Àíº¯ÊýµØÖ· OldWindowProc = GetWindowLong(Text1.hwnd, GWL_WNDPROC) '½«Text1¿Ø¼þµÄÏûÏ¢´¦Àíº¯ÊýÖ¸¶¨Îª×Ô¶¨Ò庯ÊýNewWindowProc Call SetWindowLong(Text1.hwnd, GWL_WNDPROC, AddressOf NewWindowProc) End Sub 在模块中写入以下代码 Option Explicit 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 Const GWL_WNDPROC = -4& Public Const WM_MOUSEWHEEL = &H20A Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long Public Type POINTAPI x As Long y As Long End Type Public OldWindowProc As Long 'ÓÃÀ´±£´æϵͳĬÈϵĴ°¿ÚÏûÏ¢´¦Àíº¯ÊýµÄµØÖ· Public hwndTextBox1 As Long 'ÓÃÀ´±£´æText1¿Ø¼þµÄ¾ä±ú Public hwndTextBox2 As Long 'ÓÃÀ´±£´æText2¿Ø¼þµÄ¾ä±ú '×Ô¶¨ÒåµÄÏûÏ¢´¦Àíº¯Êý Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long On Error Resume Next If Msg = WM_MOUSEWHEEL Then 'ÏÂÃæµÃµ½Êó±êλÖô¦µÄ¶ÔÏóµÄ¾ä±ú Dim CurPoint As POINTAPI, hwndUnderCursor As Long GetCursorPos CurPoint hwndUnderCursor = WindowFromPoint(CurPoint.x, CurPoint.y) 'Èç¹ûÊó±êλÓÚForm1.Text1ÄÚ²¿£¬Ôò¶ÔÊó±ê¹öÂÖʼþ½øÐд¦Àí If hwndUnderCursor = hwndTextBox1 Then If wParam = -7864320 Then 'ÏòϹö¶¯ Form1.Text1 = CInt(Form1.Text1) - 1 ElseIf wParam = 7864320 Then 'ÏòÉϹö¶¯ Form1.Text1 = CInt(Form1.Text1) + 1 End If ElseIf hwndUnderCursor = hwndTextBox2 Then If wParam = -7864320 Then 'ÏòϹö¶¯ Form1.Text2 = CInt(Form1.Text2) - 1 ElseIf wParam = 7864320 Then 'ÏòÉϹö¶¯ Form1.Text2 = CInt(Form1.Text2) + 1 End If End If Else 'µ÷ÓÃText1µÄĬÈÏ´°¿ÚÏûÏ¢´¦Àíº¯Êý NewWindowProc = CallWindowProc(OldWindowProc, hwnd, Msg, wParam, lParam) End If End Function 运行时把鼠标放在两个textbox中,然后滚动鼠标滚轮,看看效果。 PS:模块中的代码不能放在窗体里
worldy 2013-03-22
  • 打赏
  • 举报
回复
能,需要使用setwindowlong 对鼠标滚轮消息进行处理
酷心 2013-03-22
  • 打赏
  • 举报
回复
不支持,但可以子类化自己处理消息……

1,451

社区成员

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

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