Страница: 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
Ответить
|
Номер ответа: 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).
Ответить
|
Страница: 1 |
Поиск по форуму