2010-04-26 2 views
1

Ce qui se passe jusqu'à maintenant est la suivante:Comment puis-je faire un processus dans un événement OnLButtonDown() encore et encore jusqu'à ce que j'habite le bouton?

Toute ligne se produit une fois, et si j'utilise un while(1) ou while (nFlags == MK_LBUTTON) son travail comme il se doit, mais je reçois un accident.

L'autre problème, ou peut-être le même est le délai si je serai en mesure de le faire, peut-être en utilisant while() avec Timer()?

Je pensais à Timer() pour rappeler la fonction avec délai mais je ne peux pas appeler OnLButtonDown() parce que je comprends que seul un message peut l'appeler avec les arguments.

Répondre

1

Dans OnLButtonDown(), appelez SetTimer() pour démarrer une minuterie, par ex. toutes les 100ms. Ensuite, ajoutez OnLButtonUp() et appelez KillTimer() pour arrêter le fonctionnement de la minuterie. Ensuite, faites votre code dans la fonction OnTimer() (ajoutez WM_TIMER à la carte de message) et il fonctionnera pendant que la souris est maintenue enfoncée.

Notez que si l'utilisateur clique et fait glisser la souris en dehors de votre fenêtre, vous obtenez OnLButtonDown() appelé mais pas OnLButtonUp() qui peut laisser le programme en pensant que le bouton de la souris est bloqué. Les fonctions pour traiter ceci sont: appeler SetCapture() en même temps que SetTimer() et ReleaseCapture() en même temps que KillTimer() pour continuer à recevoir des messages de souris, peu importe où la souris est. Je vous conseille de rechercher toutes les fonctions que j'ai mentionnées dans cette réponse sur MSDN et de les lire pour plus d'informations.

1

Au lieu d'utiliser des boucles while, souvenez-vous de l'ancienne mousestate.

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

De cette façon, vous savez que l'utilisateur tient le bouton et ne l'a pas récemment cliqué. Mais vous pouvez envoyer des messages WM pour tromper votre application sur laquelle le bouton a été enfoncé si vous le souhaitez. Je ne peux pas vraiment vous guider dans une direction particulière parce que je ne suis pas vraiment sûr de ce que vous voulez accomplir; P C'est la meilleure réponse que je peux vous donner du peu que j'ai compris de votre question.

+0

Cela semble être correct. – ckv

+0

Ça n'a pas marché, pas pour moi ... J'essaie de créer un effet aérographe, c'est pourquoi je dois appeler la fonction lbnckicked encore et encore jusqu'à ce que j'arrête de pousser le bouton ... – Erez

Questions connexes