我自己做了一个控件,然后把它放到了窗体中的PictureBox控件当中。一切运行正常且良好,但是运行起来这个控件在窗体中比较多,为了用户能够浏览到下面的部分,我没有办法只能在PictureBox控件旁边加上了一个VScrollBar控件,然后写代码:
Picture1.Top = -VScroll1.Value就想当拉动这个VScrollBar控件的时候,PictureBox控件能够移动显示出下面的需要浏览的控件请问高手,怎么样才能使鼠标滚轮让这个VScrollBar控件向下拉动实现我的功能???拜求拜求!!!!!!
Picture1.Top = -VScroll1.Value就想当拉动这个VScrollBar控件的时候,PictureBox控件能够移动显示出下面的需要浏览的控件请问高手,怎么样才能使鼠标滚轮让这个VScrollBar控件向下拉动实现我的功能???拜求拜求!!!!!!
lngPreProc = SetWindowLong(Picture1.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End SubPrivate Sub Form_Unload(Cancel As Integer)
SetWindowLong Picture1.hwnd, GWL_WNDPROC, lngPreProc
End Sub
=======================================================================
模块内容:
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 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 lngPreProc As LongPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
If uMsg <> 522 Then
WindowProc = CallWindowProc(lngPreProc, hwnd, uMsg, wParam, lParam)
Else '滚轮
On Error Resume Next
With Form1.VScroll1
If wParam > 0 Then
.Value = .Value - .SmallChange
Else
.Value = .Value + .SmallChange
End If
End With
End If
End Function
说说你那里是怎么不行?表现是什么?
第一个Pic1设为你想要在FORM中显示的大小
第二个Pic2做大一点,大到能全部显示你要显示的所有控件(你的控件就放在Pic2中)
然后把Pic2放在Pic1中,
最后用Pic2.Top = -VScroll1.Value
你试试看
Option ExplicitPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private 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
Private Const GWL_WNDPROC As Long = (-4)
Private Const WM_MOUSEWHEEL As Long = &H20A
Private m_OldWindowProc As LongPublic Sub HookWheel()
m_OldWindowProc = SetWindowLong(Form1.hWnd, GWL_WNDPROC, AddressOf pvWindowProc)
End SubPrivate Function pvWindowProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case wMsg
Case WM_MOUSEWHEEL
Select Case wParam
Case Is > 0
SendKeys "{Up}"
Case Else
SendKeys "{Down}"
End Select
End Select
pvWindowProc = CallWindowProc(m_OldWindowProc, hWnd, wMsg, wParam, lParam)
End Function
'窗体中
Option ExplicitPrivate Sub Form_Load()
Call HookWheel
End SubPrivate Sub Pic2_Click()
VScroll1.SetFocus
End Sub