Избежать нажатия WM_LBUTTONUP при WM_LBUTTONDBLCLK
От: Аноним  
Дата: 14.12.04 07:22
Оценка:
Здравствуйте.
Люди, подскажите плз. Есть обычная иконка в systray. У нее нао обрабатывать сообщения WM_LBUTTONDBLCLK и WM_LBUTTONDOWN (или WM_LBUTTONUP). Проблема в том, что если я делаю на иконке дабл клик. То у меня срабатывает и WM_LBUTTONDOWN. И уже потом WM_LBUTTONDBLCLK. Можно как-то избежать этого нажатия, чтобы только дабл срабатывал?
Re: Избежать нажатия WM_LBUTTONUP при WM_LBUTTONDBLCLK
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 14.12.04 07:37
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Люди, подскажите плз. Есть обычная иконка в systray. У нее нао обрабатывать сообщения WM_LBUTTONDBLCLK и WM_LBUTTONDOWN (или WM_LBUTTONUP). Проблема в том, что если я делаю на иконке дабл клик. То у меня срабатывает и WM_LBUTTONDOWN. И уже потом WM_LBUTTONDBLCLK. Можно как-то избежать этого нажатия, чтобы только дабл срабатывал?


AFAIK "избежать" получится вряд ли, поскольку:

Double-clicking the left mouse button actually generates a sequence of four messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP.


Но можно воспользоваться функцией GetDoubleClickTime() и проверять интервал между двумя соседними WM_LBUTTONUP.
[ posted via RSDN@Home 1.1.4 beta 3 r241 ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re: Избежать нажатия WM_LBUTTONUP при WM_LBUTTONDBLCLK
От: Pavel Dvorkin Россия  
Дата: 15.12.04 07:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте.

А>Люди, подскажите плз. Есть обычная иконка в systray. У нее нао обрабатывать сообщения WM_LBUTTONDBLCLK и WM_LBUTTONDOWN (или WM_LBUTTONUP). Проблема в том, что если я делаю на иконке дабл клик. То у меня срабатывает и WM_LBUTTONDOWN. И уже потом WM_LBUTTONDBLCLK. Можно как-то избежать этого нажатия, чтобы только дабл срабатывал?

В ответ на WM_KEYDOWN заводишь таймер на время GetDoubleClickTime(). Теперь одно из двух -либо раньше придет WM_LBUTTONDBLCLK , либо WM_TIMER . В первом случае делаешь, то, что у тебя положено на WM_LBUTTONDBLCLK, во втором — то, что на WM_LBUTTONDOWN (отложенное действие). В обоих случаях первым делом убиваешь таймер.

Недостаток — временная задержка при single click. Но тут уж ничего не поделаешь.

With best regards
Pavel Dvorkin
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.