Vb6 通过拖动鼠标滚动图像

Vb6 通过拖动鼠标滚动图像,vb6,draggable,mouseevent,picturebox,Vb6,Draggable,Mouseevent,Picturebox,当我使用水平和垂直滚动条时,我有一个滚动的图像。但我想通过像在Photoshop中一样拖动图像来滚动图像(使用手动工具并浏览缩放后的图像)。在VisualBasic6.0中有没有这样做的方法?我已将鼠标的默认光标更改为手动光标。现在我只想通过拖动图像进行滚动。很简单,您只需要处理包含图像的控件的鼠标事件。我将使用我编写的一个应用程序中的生产代码一步一步地指导您实现这个完全相同的功能 从MouseDown事件开始。在这里,您需要检查哪个按钮已按下(如果您希望只允许使用左键、左键和右键或右键进行拖动

当我使用水平和垂直滚动条时,我有一个滚动的图像。但我想通过像在Photoshop中一样拖动图像来滚动图像(使用手动工具并浏览缩放后的图像)。在VisualBasic6.0中有没有这样做的方法?我已将鼠标的默认光标更改为手动光标。现在我只想通过拖动图像进行滚动。

很简单,您只需要处理包含图像的控件的鼠标事件。我将使用我编写的一个应用程序中的生产代码一步一步地指导您实现这个完全相同的功能

MouseDown
事件开始。在这里,您需要检查哪个按钮已按下(如果您希望只允许使用左键、左键和右键或右键进行拖动),将鼠标光标更改为闭合或拍手(指示正在进行拖动),并设置一些跟踪光标起始坐标的成员变量。例如:

Private Sub picBox_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    ' When left mouse button is pressed down (initiating a drag)
    If Button = 1 Then
        ' Store the coordinates of the mouse cursor
        xpos = x
        ypos = y

        ' Change the cursor to hand grab icon
        picBox.MouseIcon = LoadPicture(App.Path & "\Resources\Cursors\grab.ico")
    End If
End Sub
然后,您将处理
MouseMove
事件,在该事件中,您将执行实际的拖动(在图片框中移动图像)。在本例中,我选择在容器窗体上简单地移动整个图片框控件,而不是在图片框内移动图像。您可能需要更改此处的逻辑,具体取决于表单的布局和具体需求。例如,如果您说您有滚动条,在这种情况下,您需要在此处调整X和Y滚动条的位置

Private Sub picBox_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    ' When left mouse button is being held down (drag)
    If Button = 1 Then
        ' Drag the picture box around the form
        picBox.Move x + (picBox.Left - xpos), y + (picBox.Top - ypos)
    End If
End Sub
最后,您需要处理
MouseUp
事件,通过重置光标结束拖动:

Private Sub picBox_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    ' Stop normal dragging
    If Button = 1 Then
        ' Set the cursor back to the unclapsed hand
        picBox.MouseIcon = LoadPicture(App.Path & "\Resources\Cursors\hand.ico")
    End If
End Sub
当然,您需要将这些成员变量添加到表单类的顶部,以便跟踪光标的上一个位置(在x和y坐标中)。像这样简单的事情可以做到:

Private xpos As Long
Private ypos As Long
光标看起来像这样,类似于Adobe Acrobat或Mac OS 9(可能最初由Susan Kare这样的魔术师绘制;可能不在公共领域):