|
|
|
Куда может пропасть WM_LBUTTONDBLCLK ?
|
|||
|---|---|---|---|
|
#18+
Есть некоторая программа на VS C++. Запускаю я ее, нажимаю два раза мышкой на окошке. Смотрю в главной очереди сообщений пришли среди прочего два сообщения WM_LBUTTONDOWN WM_LBUTTONDBLCLK. Я поставил запись в лог этих сообщений. Также это можно отследить в Spy++. Потом эти сообщения обрабатываются в соответвующих местах. Все хорошо. После этого что-то кто-то изменил в этой программе. Причем так, что на при тех же действиях в главной очереди сообщение WM_LBUTTONDOWN приходит и обрабатывается, а WM_LBUTTONDBLCLK не приходит, и соответвено не обрабатывается никак. Но почему оно не приходит ? Spy++ также не показывает WM_LBUTTONDBLCLK. Куда это собщение могло дется ? Как это можно отладить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 18:37 |
|
||
|
Куда может пропасть WM_LBUTTONDBLCLK ?
|
|||
|---|---|---|---|
|
#18+
А что за окошко (диалог, кнопочка, view)? Во-первых, у окошка может быть "window class" без стиля CS_DBLCLKS, тогда оно не получает это сообщение. Во-вторых, если речь идёт например о диалоге, а двойной щелчок происходит в пределах какого-нибудь дочернего окна, и у этого окна вставили обработчик, который не пропускает это событие дальше (родителю). Могут быть и ещё причины, сходу не соображу. После этого что-то кто-то изменил в этой программе. Нет предыдущего текста программы для сравнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2007, 12:24 |
|
||
|
Куда может пропасть WM_LBUTTONDBLCLK ?
|
|||
|---|---|---|---|
|
#18+
Стиль CS_DBLCLKS я проверил - у всех окон приложения этот стиль стоит. При более тщательном изучении прблемы я обнаружил следующее: в новом варианте в главную очередь обработки сообщений при двойном нажатии мышки попадают следующие собщения: WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_LBUTTONUP Все они передаются вниз соответвующим окнам и там обрабатываются, что логично (но в когда обрабатывается WM_LBUTTONDBLCLK происходят неправильные действия, что и приводит в конечном итоге к неправильному поведению программы, но это уже совсем другая история). А вот в старом варианте программы в главную очередь сообщений при таком же двойном нажатии мышки приходили WM_LBUTTONDOWN и затем это сообщение предавалось дальше окнам WM_LBUTTONUP WM_LBUTTONDOWN WM_LBUTTONUP но сообщения эти вниз соответвующим окна передавались не все, а только первое из WM_LBUTTONUP. Все это из-за того, что не переключался фокус с одно комбобокса. Поведение его как раз и было изменено в новом варианте. Но когда все же фокус с этого комбобокса терялся, при переключении, например, на другое приложение WM_LBUTTONUP передавался все-же окнам и обрабатывался там. При этом, что самое удивительное не формируется WM_LBUTTONDBLCLK, хотя я понимаю его формирует сама операционная система, если видит два удара мышки подряд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2007, 17:13 |
|
||
|
Куда может пропасть WM_LBUTTONDBLCLK ?
|
|||
|---|---|---|---|
|
#18+
его формирует сама операционная система, если видит два удара мышки подряд Видимо "подряд" должно быть в пределах одного и того же окна, иначе кому из них его посылать? Явного указания на это я не нашёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2007, 17:18 |
|
||
|
Куда может пропасть WM_LBUTTONDBLCLK ?
|
|||
|---|---|---|---|
|
#18+
Ой ВэйВидимо "подряд" должно быть в пределах одного и того же окна, иначе кому из них его посылать? Явного указания на это я не нашёл. Ну я же нажимаю два раза мышкой и в старой и в новой программе в одно и то же место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2007, 19:08 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=290&tid=2028688]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 356ms |

| 0 / 0 |
