Проблемы с MouseWheel и ScrollBar.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Проблемы с MouseWheel и ScrollBar.

Сообщение Avtopic » 01.02.2008 (Пт) 16:55

Здравствуйте!

У меня проблемы с MouseWheel и ScrollBar.

Устанавливая
Код: Выделить всё
SetWindowLong(UserControl.hwnd, GWL_WNDPROC, AddressOf WindowProc)

и ловя WM_MouseWheel, для UserControl-а, этот Msg приходит и от Control-а и от Формы на котором этот Control сидит.
Это почему?

Спасибо!

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 01.02.2008 (Пт) 19:17

С ообщение WM_MouseWheel приходит только от твоего UserControl-а,
дело в том что это сообщение будет приходить до те пор пока твой UserControl имеет фокус.
Например брось рядом с UserControl-ом кнопочку и нажми на неё,
и от твоего UserControl-а сообщение WM_MouseWheel больше не пойдёт пока UserControl не получит фокус.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 02.02.2008 (Сб) 18:09

Спасибо за ответ. В моем случае ошибка заключалось в том, что нужно было отслеживать
WM_VSCROLL вместо WM_MouseWheel. Все исправил и все работает.

Но другой, более простой вопрос?

Как писал выше, все это, происходит в UserControl-е.

Там все ошибки прослеживаются, и при необходимости, вовремя снимаю хук.

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

Т.е. как корректно снимать хук в контроле, когда ошибка происходит в основной программе.

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 02.02.2008 (Сб) 20:40

А падение происходит в IDE ?

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 03.02.2008 (Вс) 12:03

Да

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 03.02.2008 (Вс) 13:40

Тогда на стадии разработки сабклассинг подключай из другого контрола.
Падений почти не будет.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 04.02.2008 (Пн) 11:58

Я при старте сабклассинга просто проверяю, что я не в IDE.
Ну и не ставлю хук на отладку.
label:
cli
jmp label

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 04.02.2008 (Пн) 19:33

Аналогично. Вот так проверяю в IDE запущена программа или нет:
Код: Выделить всё
Private Function InIDE(Optional ByRef blArg As Boolean) As Boolean
Static blRet As Boolean
blRet = blArg
If Not blRet Then
    Debug.Assert InIDE(True)
End If
InIDE = blRet
End Function

Соответственно проверяем так:
Код: Выделить всё
If Not InIDE() then 'мы не под IDE
Подпись проходит рефакторинг


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

    TopList