vb6使用滚轮的问题

时间:2022-06-09 01:51:09
我的form中有个picture控件(name:picContent),为picture控件配置了一个VScrollBar(name:scr),我希望鼠标进入picture后就可以使用滚轮,触发scr_Change()函数,为此编了两个函数:
Private Sub picContent_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
On Error Resume Next
If iRealseStatus <> 0 Then
If iMouseStatus <> 1 Then
    Oldwinproc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
    SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf PicScroll
    iMouseStatus = 1
End If
End If
End Sub

Public Function PicScroll(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 -7864320
    'SendKeys "{PGDN}"
    If form1.scr.Value <= form1.scr.Max - 5 Then
    form1.scr.Value = form1.scr.Value + 5
    End If
    Case 7864320
    'SendKeys "{PGUP}"
    If form1.scr.Value >= form1.scr.Min + 5 Then
    form1.scr.Value = form1.scr.Value - 5
    End If
    End Select
End Select

picture中还有很多其他控件,鼠标进入后picture要先点击没有控件的地方才能使用滚轮,而我希望鼠标已进入picture容器就能触发,我应该怎么修改?

11 个解决方案

#1


应该使用HOOK。截获鼠标消息。

#2


老兄能不能讲清楚一些,应该怎么用啊?

#3


既然先要点击,那就用sendmessage发送一个鼠标点击事件

#4


自己顶一下,还有人知道怎么解决吗?

#5


不用加控件,直接在Form_Load中调用SetListBoxScroll


Public Function SetListBoxScroll(ByVal Num As Long) As Long
'Num=1000
Dim Information#, Scrollbar#
Information = SendMessage(Form1.Picture1.hwnd, LB_SETHORIZONTALEXTENT, Num, 0)
Scrollbar = GetWindowLong(Form1.Picture1.hwnd, GWL_STYLE)
Scrollbar = Scrollbar Or WS_HSCROLL
SetWindowLong Form1.Picture1.hwnd, GWL_STYLE, Scrollbar
SetWindowPos Form1.Picture1.hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOOWNERZORDER Or SWP_NOSIZE Or SWP_FRAMECHANGED
End Function

#6


这是个添加一个横向的Scroll

#7


我试了一下,怎么增加不了Scroll呢?我看代码也没有报错啊。

#8


在PictureBox的MouseMove中写
PictureBox1.SetFocus

#9


我用控件,很简单

#10


这是用什么控件啊?

回复于: 2014-01-30 20:56:56 
我用控件,很简单 

#11


用TIMER可以吗?

#1


应该使用HOOK。截获鼠标消息。

#2


老兄能不能讲清楚一些,应该怎么用啊?

#3


既然先要点击,那就用sendmessage发送一个鼠标点击事件

#4


自己顶一下,还有人知道怎么解决吗?

#5


不用加控件,直接在Form_Load中调用SetListBoxScroll


Public Function SetListBoxScroll(ByVal Num As Long) As Long
'Num=1000
Dim Information#, Scrollbar#
Information = SendMessage(Form1.Picture1.hwnd, LB_SETHORIZONTALEXTENT, Num, 0)
Scrollbar = GetWindowLong(Form1.Picture1.hwnd, GWL_STYLE)
Scrollbar = Scrollbar Or WS_HSCROLL
SetWindowLong Form1.Picture1.hwnd, GWL_STYLE, Scrollbar
SetWindowPos Form1.Picture1.hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOOWNERZORDER Or SWP_NOSIZE Or SWP_FRAMECHANGED
End Function

#6


这是个添加一个横向的Scroll

#7


我试了一下,怎么增加不了Scroll呢?我看代码也没有报错啊。

#8


在PictureBox的MouseMove中写
PictureBox1.SetFocus

#9


我用控件,很简单

#10


这是用什么控件啊?

回复于: 2014-01-30 20:56:56 
我用控件,很简单 

#11


用TIMER可以吗?