Прокрутка изображения путем перетаскивания мышью - PullRequest
4 голосов
/ 15 апреля 2011

У меня есть изображение, которое прокручивается при использовании горизонтальной и вертикальной полос прокрутки. Но я хочу прокрутить изображение, перетаскивая его, как в Photoshop (используя ручной инструмент и исследуя увеличенное изображение). Есть ли способ сделать таким образом в Visual Basic 6.0? Я изменил курсор мыши по умолчанию на курсор в виде руки. Теперь я просто хочу прокрутить изображение, перетащив его.

1 Ответ

8 голосов
/ 15 апреля 2011

Просто, вам просто нужно обработать события мыши для элемента управления, который содержит ваше изображение. Я проведу вас шаг за шагом, используя производственный код из приложения, которое я написал и которое реализует эту же функцию.

Начните с события 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

И, конечно, вам необходимо добавить переменные-члены в начало класса Form, которые отслеживают предыдущую позицию курсора (в координатах x и y). Что-то простое, как это будет делать:

Private xpos As Long
Private ypos As Long

Курсоры выглядели примерно так, подобно тому, что вы найдете в Adobe Acrobat или Mac OS 9 (вероятно, первоначально нарисованные кем-то волшебным, как Сьюзан Каре; возможно, не в открытом доступе):

...