|
让VB应用程序支持鼠标滚轮(3) Public Const GWL_WNDPROC = -4 Public Const SPI_GETWHEELSCROLLLINES = 104 Public Const WM_MOUSEWHEEL = &H20A Public WHEEL_SCROLL_LINES As Long Global lpPrevWndProc As Long
Public Sub Hook(ByVal hWnd As Long) lpPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, _ AddressOf WindowProc) '获取"控制面板"中的滚动行数值 Call SystemParametersInfo(SPI_GETWHEELSCROLLLINES, _ 0, WHEEL_SCROLL_LINES, 0) If WHEEL_SCROLL_LINES > Form1.grdDataGrid.VisibleRows Then WHEEL_SCROLL_LINES = Form1.grdDataGrid.VisibleRows End If End Sub
Public Sub UnHook(ByVal hWnd As Long) Dim lngReturnValue As Long lngReturnValue = SetWindowLong(hWnd, GWL_WNDPROC, lpPrevWndProc) End Sub
Function WindowProc(ByVal hw As Long, _ ByVal uMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Dim pt As POINTL Select Case uMsg Case WM_MOUSEWHEEL Dim wzDelta, wKeys As Integer wzDelta = HIWORD(wParam) wKeys = LOWORD(wParam) pt.x = LOWORD(lParam) pt.y = HIWORD(lParam) '将屏幕坐标转换为Form1.窗口坐标 ScreenToClient Form1.hWnd, pt With Form1.grdDataGrid
'判断坐标是否在Form1.grdDataGrid窗口内 If pt.x > .Left / Screen.TwipsPerPixelX And _ pt.x < (.Left + .Width) / Screen.TwipsPerPixelX And _ pt.y > .Top / Screen.TwipsPerPixelY And _ pt.y < (.Top + .Height) / Screen.TwipsPerPixelY Then '滚动明细数据库 If wKeys = 16 Then '滚动键按下,水平滚动grdDataGrid
|