中企汇融怎么样:VB dagagrid如何实现滚轮

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 13:46:03
在VB里的使用datagrid控件时,不能使用鼠标滚轮上下移动
哪位VB高手帮帮忙
如果解次,加500分

bas里的代码:(钩子得用GetWindowLong、SetWindowLong、CallWindowProc三个API,SetWindowLong要用到AddressOf回调自己的窗口函数,故要在工程里建立标准模块。好像有点废话呀)

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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 Const GWL_WNDPROC = (-4)
Public Const WM_MOUSEWHEEL = &H20A

Public lpWndProc As Long

Public Sub Hook(hwnd As Long)
lpWndProc = GetWindowLong(hwnd, GWL_WNDPROC) '获得原始窗口函数句柄
SetWindowLong hwnd, GWL_WNDPROC, AddressOf WindowProc '装载WM_MOUSEWHEEL消息的处理过程到窗口函数
End Sub

Public Sub UnHook(hwnd As Long)

SetWindowLong hwnd, GWL_WNDPROC, lpWndProc '御掉Hook,还原原始窗口函数

End Sub

Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'处理WM_MOUSEWHEEL消息的窗口函数

If uMsg = WM_MOUSEWHEEL Then
Dim wzDelta As Integer
wzDelta = HIWORD(wParam)

If Sgn(wzDelta) = 1 Then
DatabaseForm.DataGrid.Scroll 0, -1
Else
DatabaseForm.DataGrid.Scroll 0, 1
End If

End If

WindowProc = CallWindowProc(lpWndProc, hwnd, uMsg, wParam, lParam)

End Function

Public Function HIWORD(MsgParam As Long) As Integer
'取出32位值的高16位
HIWORD = (MsgParam And &HFFFF0000) \ &H10000
End Function

Form里的代码:

Private Sub Form_Load()
Hook DataGrid.hwnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnHook DataGrid.hwnd
End Sub

不过,这一点请记住,当转动鼠标滚轮之前,一定要选中DataGrid控件的任意一行(即:使这一行高亮显示)

莫办法实现。。微软提供的Datagrid控件不支持滚轮。因为VB刚出来的时候还没有三键鼠标。。就好象在VB代码页中怎么可能实现滚轮吗??

你是在建表吗??如果是的话,你可以用vb工具栏的外界程序,利用数据库建表,数据库和vb相连,功能很强大的,而且操作简单,易学