Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Еще вопросик про колесико мышки и картинку Добавлено: 27.12.06 01:16  

Автор вопроса:  Tur | ICQ: 201446364 
На контроле PictureBox в vb6 нарисовано множество(сотни)не пересекающихся многоугольников. Я строю просмотрщик этих многоугольников. По вертикали задана шкала PictureBox-а. Двумя горизонтальными линиями (верхней и нижней)которые левой и правой мышкой двигаю по PictureBox-у выделяю кусок для просмотра (т.е. часть этих многоугольников). Хорошо было бы еще добавить возможность двигать (вверх и вниз) колесиком мышки изображение на картинке наподобие того как это сделано напр в Internet Explorer-e. Как это сделать? В событиях PictureBox-а этого не нашел. Как извлечь значение поворота колесика мышки?

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 27.12.06 11:01
The WM_MOUSEWHEEL message is sent to the focus window when the mouse wheel is rotated.

Ответить

Номер ответа: 2
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #2 Добавлено: 27.12.06 12:26
GSerg, спасибо. А как схватить это сообщение?

Ответить

Номер ответа: 3
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #3
Добавлено: 27.12.06 16:58
http://www.yandex.ru/yandsearch?rpt=rad&text=WM_MOUSEWHEEL+

Ответить

Номер ответа: 4
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #4 Добавлено: 27.12.06 22:18
Вот здесь нашел: http://content.mail.ru/arch/16378/1295673.html
'КОД ФОРМЫ
Option Explicit

Private Sub Form_Load()
Call Hook(Me.hwnd)
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call UnHook(Me.hwnd)
End Sub


'КОД МОДУЛЯ
Option Explicit
Private Declare Function CallWindowProcA Lib "user32" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowTextA Lib "user32" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Const GWL_WNDPROC = -4
Private Const WM_MOUSEWHEEL = &H20A
Private lpPrevWndProc As Long, Wheel As Integer

Sub Hook(hwnd As Long)
lpPrevWndProc = SetWindowLongA(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Sub UnHook(hwnd As Long)
Call SetWindowLongA(hwnd, GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo xErr
If uMsg = WM_MOUSEWHEEL Then
If wParam = -7864320 Or wParam = -23592960 Or wParam = -15728640 Then Wheel = -1
If wParam = 7864320 Or wParam = 23592960 Or wParam = 15728640 Then Wheel = 1
Call SetWindowTextA(Form1.hwnd, "Wheel " & Wheel)
Else
WindowProc = CallWindowProcA(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
End If
xErr:
End Function

Для Me.hwnd при отключении программы выдается сообщение о неустранимой ошибке, но при замене на Picture.hwnd все работает стабильно.

Ответить

Номер ответа: 5
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 27.12.06 23:21
возможно в лоаде хукать рано, нужно чуть позже... в таймерике, спустя несколько мс...

Ответить

Номер ответа: 6
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #6 Добавлено: 28.12.06 14:19
Я сделал иначе:
Public HookOne As Boolean

И при открытии файла

If Not HookOne Then
  HookOne = True
  Call Hook(Frm.Pic.hwnd)
End If

т.е. Hook(Frm.Pic.hwnd) срабатывает один раз в программе и только перед тем как это нужно.

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 29.12.06 03:34
И при открытии файла
А чё например не при смене там.. х.з нагрузки процессора :))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам