Что происходит, до сих пор это:
Любая строка происходит однажды, и если я использую awhile(1)
или while (nFlags == MK_LBUTTON)
его работа, как это должно, но я получаю катастрофический отказ.
Другая проблема, или возможно тот же - задержка, если я смогу сделать это, возможно, с помощью while()
с Timer()
?
Я думал о Timer()
для вспоминания функции с задержкой, но я не могу звонить OnLButtonDown()
потому что asI понимают это, только сообщение может назвать его с аргументами.
В OnLButtonDown ()
вызовите SetTimer ()
, чтобы запустить таймер, например. каждые 100 мс. Затем добавьте OnLButtonUp ()
и вызовите KillTimer ()
, чтобы остановить работу таймера. Затем введите свой код в функцию OnTimer ()
(добавьте WM_TIMER
в карту сообщений), и он будет работать, пока мышь удерживается нажатой.
Обратите внимание, что если пользователь щелкает и перетаскивает мышь за пределы вашего окна, вы вызываете OnLButtonDown ()
, но не вызываете OnLButtonUp ()
, что может заставить программу думать, что кнопка мыши застряла. вниз. Функции для решения этой проблемы: вызов SetCapture ()
одновременно с SetTimer ()
и ReleaseCapture ()
одновременно с KillTimer ()
, чтобы продолжать получать сообщения мыши независимо от того, где находится мышь. Я бы посоветовал найти все функции, которые я упомянул в этом ответе, в MSDN и прочитать о них для получения дополнительной информации.
Вместо использования циклов while вспомните старое состояние мыши.
if (oldFlags == MK_LBUTTON && nFlags == MK_LBUTTON)
Таким образом вы узнаете, что пользователь держит кнопку, а не только что недавно ее щелкнул.
Но вы можете отправлять WM-сообщения, чтобы обмануть ваше приложение, на которое была нажата кнопка, если хотите. Я не могу направить вас в каком-либо конкретном направлении, потому что я не совсем уверен, чего вы хотите достичь ; P Это лучший ответ, который я могу вам дать из того немногого, что я понял в вашем вопросе.