不好意思,借个位置!
=====================
wzzwwz(棒子面窝头)
............
If uMsg = WM_MOUSEWHEEL Then
With Form1.VScroll1
If wParam < 0 Then
.............
就上面的语句,如何令它响应其他窗体的滚动条?
包括横向、纵向滚动条
Private Sub Form_Load()
VScroll1.Max = 10
VScroll1.Min = 1
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub
Private Sub VScroll1_Change()
Cls
Print "滚动条数值:" & VScroll1.Value
End Sub
'标准模块代码
Option Explicit
Public Const GWL_WNDPROC = -4
Public Const WM_MOUSEWHEEL = &H20A
Public prevWndProc 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 Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
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 Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_MOUSEWHEEL Then
With Form1.VScroll1
If wParam < 0 Then
If .Value < .Max Then
.Value = .Value + 1
End If
Else
If .Value > .Min Then
.Value = .Value - 1
End If
End If
End With
Else
WndProc = CallWindowProc(prevWndProc, hWnd, uMsg, wParam, lParam)
End If