Как я могу заставить процесс в событии OnLButtonDown() произойти снова и снова, непока я не живу кнопка?

Что происходит, до сих пор это:

Любая строка происходит однажды, и если я использую awhile(1) или while (nFlags == MK_LBUTTON) его работа, как это должно, но я получаю катастрофический отказ.

Другая проблема, или возможно тот же - задержка, если я смогу сделать это, возможно, с помощью while() с Timer()?

Я думал о Timer() для вспоминания функции с задержкой, но я не могу звонить OnLButtonDown() потому что asI понимают это, только сообщение может назвать его с аргументами.

1
задан Yi Jiang 26 September 2010 в 00:54
поделиться

2 ответа

В OnLButtonDown () вызовите SetTimer () , чтобы запустить таймер, например. каждые 100 мс. Затем добавьте OnLButtonUp () и вызовите KillTimer () , чтобы остановить работу таймера. Затем введите свой код в функцию OnTimer () (добавьте WM_TIMER в карту сообщений), и он будет работать, пока мышь удерживается нажатой.

Обратите внимание, что если пользователь щелкает и перетаскивает мышь за пределы вашего окна, вы вызываете OnLButtonDown () , но не вызываете OnLButtonUp () , что может заставить программу думать, что кнопка мыши застряла. вниз. Функции для решения этой проблемы: вызов SetCapture () одновременно с SetTimer () и ReleaseCapture () одновременно с KillTimer () , чтобы продолжать получать сообщения мыши независимо от того, где находится мышь. Я бы посоветовал найти все функции, которые я упомянул в этом ответе, в MSDN и прочитать о них для получения дополнительной информации.

1
ответ дан 3 September 2019 в 01:00
поделиться

Вместо использования циклов while вспомните старое состояние мыши.

if (oldFlags == MK_LBUTTON && nFlags == MK_LBUTTON) 

Таким образом вы узнаете, что пользователь держит кнопку, а не только что недавно ее щелкнул.

Но вы можете отправлять WM-сообщения, чтобы обмануть ваше приложение, на которое была нажата кнопка, если хотите. Я не могу направить вас в каком-либо конкретном направлении, потому что я не совсем уверен, чего вы хотите достичь ; P Это лучший ответ, который я могу вам дать из того немногого, что я понял в вашем вопросе.

1
ответ дан 3 September 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: