Как сделать так, чтобы процесс OnLButtonDown () происходил снова и снова, пока я не нажму кнопку? - PullRequest
1 голос
/ 27 апреля 2010

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

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

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

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

Ответы [ 2 ]

1 голос
/ 27 апреля 2010

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

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

1 голос
/ 27 апреля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...