Обработка сообщения WM_MOUSEMOVE и мерцание курсора

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Обработка сообщения WM_MOUSEMOVE и мерцание курсора

Сообщение anian » 28.05.2007 (Пн) 13:04

Код: Выделить всё

Private Function ISubclass_WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Dim tTME As tagTRACKMOUSEEVENT

  Select Case iMsg
    Case WM_MOUSELEAVE
        Debug.Print "mouse leave"
        g_bOver = False
        pDraw
    Case WM_MOUSEMOVE
        Debug.Print "wm_move"
        'SetCursor LoadCursor(0, IDC_IDC_SIZEALL)
        If Not g_bOver Then
            g_bOver = True
           
            SetCursor LoadCursor(0, IDC_IDC_SIZEALL)
            Debug.Print "true over"
            With tTME
               .cbSize = LenB(tTME)
               .hwndTrack = hwnd
               .dwFlags = TME_LEAVE
               .dwHoverTime = HOVER_DEFAULT
            End With
   
            TrackMouseEvent tTME
           
            pDraw
        End If
    End Select
   
End Function


Вот такой код в usercontrol'e. Сабклассер от Стива МакМэхона. При движении курсора по контролу он постоянно мерцает - то мой курсор, то стандартный. Как я понимаю, приходит какое-то сообщение, которое его сбрасывает. Если убрать камент у SetCursor после Debug.Print "wm_move", ничего не меняется, так же мерцает...как эту проблему решить?
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.05.2007 (Пн) 13:56

Не страдать фигнёй, а пользоваться для задания курсора соответствующим свойством контрола.
Но если хочется через ж, то отлавливай WM_SETCURSOR.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 29.05.2007 (Вт) 8:53

В свойствах контрола я могу задать тока свой курсор...а ежели у человека он иначе выглядит? Это не есть гуд.
Поймал WM_SETCURSOR и что дальше делать? Устанавливать свой? не помогает, меньше, но мерцает...Не пропускать его до контрола?
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.05.2007 (Вт) 9:13

anian писал(а):В свойствах контрола я могу задать тока свой курсор...а ежели у человека он иначе выглядит? Это не есть гуд.

Смысл этого текста я не смог постичь.

anian писал(а):Поймал WM_SETCURSOR и что дальше делать? Устанавливать свой? не помогает, меньше, но мерцает...Не пропускать его до контрола?

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

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 29.05.2007 (Вт) 10:16

Смысл этого текста я не смог постичь.

Пользователь может изменить вид курсора IDC_SIZEALL в системных настройках свойств мыши, так? И он будет отличаться от того, что я впихну в свойство MouseIcon контрола.

Потому что, наверное, надо читать MSDN на предмет того, что должно возвращать приложение, самостоятельно обработавшее это сообщение?

Уважаемый GSerg, а вы можете сказать, что и как оно должно возвращать?
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.05.2007 (Вт) 10:23

anian писал(а):Пользователь может изменить вид курсора IDC_SIZEALL в системных настройках свойств мыши, так? И он будет отличаться от того, что я впихну в свойство MouseIcon контрола.

А есть ещё, как ни странно, свойство MousePointer...

anian писал(а):Уважаемый GSerg, а вы можете сказать, что и как оно должно возвращать?

Нет, но я могу посоветовать открыть http://msdn.microsoft.com/library и ввести в маленькую строку поиска WM_SETCURSOR.
Впрочем, ввиду сказанного выше, это тупиковый путь.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 29.05.2007 (Вт) 11:09

Я знаю про это свойство, но: в зависимости от ситуации над контролом может быть один из нескольких курсоров IDC_SIZE*, а так же , что самое прискорбное, иногда IDC_HAND...MouseIcon и MousePointer не подходят, ибо я хочу что бы все курсоры брались из системы.

GSerg, я честно читал статьи про WM_SETCURSOR в МСДН...но понять на должном уровне не смог...если вы знаете метод решения, поделитесь, пожалуйста знанием(не примером, а алгоритмом хотя бы)...если нет - ну тада отстану
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 30.05.2007 (Ср) 7:35

Вроде решил проблему, работает. Поменял SetCursor на SetClassLong.
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!


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

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

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

    TopList