Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 |

 

  Вопрос: %WM_MOUSE* Добавлено: 26.06.05 08:25  

Автор вопроса:  SyavX
Должен ли работать этот код? Если должен, то почему не работает?..

CallBack Function DlgProc() As Long
  Select Case CbMsg
   Case %WM_MOUSEMOVE
    '...    OK     ...
   Case %WM_MOUSEHOVER
    '...Do Not Work...
   Case %WM_MOUSELEAVE
    '...Do Not Work...
   Case %WM_COMMAND
    Select Case CbCtl
     Case %IDC_BUTTON1
      Select Case CbCtlMsg
       Case %WM_MOUSEMOVE
        '...Do Not Work...
       Case %WM_MOUSEHOVER
        '...Do Not Work...
       Case %WM_MOUSELEAVE
        '...Do Not Work...
      End Select
    End Select
  End Select
End Function

Ответить

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

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



Вопросов: 0
Ответов: 1066
 Профиль | | #1 Добавлено: 26.06.05 09:34
Код работает всегда, вот только выполняет не всегда то, что хотелось писавшему его.

Открывай msdn и читай, что надо сделать, чтобы в оконную процедуру приходили WM_MOUSEHOVER/WM_MOUSELEAVE

Про WM_COMMAND -> WM_MOUSEMOVE -> WM_MOUSEHOVER:
В оконную процедуру пришло сообщение WM_COMMAND.
Т.е. Либо кликнули мышью, либо нажали enter. Какое отношение имеет к этому факт вхождения/покидания курсором мыши ректа - непонятно.
Если пришло сообщение, то пока ты его не обработаешь (или не пропустишь в DefWindowProc), других сообщений тебе не поступит.
Поэтому конструкция, где внутри обработки WM_COMMAND тебе захотелось вдруг заполучить ещё какие-то сообщения, не будет работать.
Это (на примере vb) как такой код:

Private Sub Command1_Click()
    Private Sub Form_Paint()
        ' не работает.
    End Sub
End Sub

Ответить

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



Вопросов: 25
Ответов: 149
 Профиль | | #2 Добавлено: 26.06.05 09:47
PB WinSpy создает код с такими комментариями:
     Case %WM_COMMAND
        'Messages from controls and menu items are handled here.

Вот я и подумал, что будет работать.

Открывай msdn и читай, что надо сделать, чтобы в оконную процедуру приходили WM_MOUSEHOVER/WM_MOUSELEAVE

А можешь хоть приблизительно описать, что именно надо сделать (мои знания english'а не позволяют спокойно читать MSDN). Спасибо...

Ответить

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



Вопросов: 0
Ответов: 1066
 Профиль | | #3 Добавлено: 26.06.05 10:55
'Messages from controls and menu items are handled here
Здесь подразумевается сообщения не разные, а одно и тоже (WM_COMMAND) для разных контролов


Ищи функцию TrackMouseEvent

The TrackMouseEvent function posts messages when the mouse pointer leaves a window or hovers over a window for a specified amount of time

Плюс к этому: чтобы TrackMouseEvent слала сообщения, нужно сабклассить кнопку (или что там у тебя), т.к. для кнопки (если её не сабклассить), приходят только WM_COMMAND.
Т.е. переопредели для кнопки WindowProc, сделай, чтобы сообщения для кнопки слались в отдельную, персональную callback-функцию, а не в процедуру родителя. (SetWindowLong,...,GWL_WNDPROC, NewProc).

Ответить

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



Вопросов: 25
Ответов: 149
 Профиль | | #4 Добавлено: 27.06.05 13:03
Поискал, Посмотрел, Разобрался :)
Правда только в ВБ, но надеюсь и в ПБ получится.
HOOLIGANЕ, еще раз спасибо...

Ответить

Страница: 1 |

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



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