exécuter fonction tant que click gauche souris enfoncé - C++ - Programmation
Marsh Posté le 22-11-2008 à 18:59:35
y'a pas un évenement quand on lache le bouton de la souris ?
Marsh Posté le 22-11-2008 à 19:07:24
en fait le premier IF dessine un truc à l'écran, et l'autre IF, lorsqu'on relache le bouton, est censé exécuter une fonction (mise à jour de l'affichage) une fois que le bouton est relaché...
Code :
|
le problème est que OnKeyboardNotify n'est appelé que lorsqu'il y a un évènement souris qui est envoyé, non? (manque de connaissances à ce niveau je sais :s)
donc il ne détecte pas que le bouton a été relaché tant qu'il n'est pas arrivé à l'accolade fermante? (d'ou la boucle infinie dès que je clique si je remplace le IF par un WHILE)
Marsh Posté le 24-11-2008 à 15:10:33
En programmation événementielle, tu as une fonction callback associée à chaque événement. La boucle qui gère les événements (le combo "while GetMessage() TranslateMessage() DispatchMessage()" sous windows ou "while XNextEvent()" sous linux X11) traite les événements les uns après les autres dans le thread principal de l'application.
Si aucune fonction n'est attachée à un événement, une fonction par défaut est exécutée, ou bien carrément aucune fonction. L'événement peut être également ignoré.
La gestion de ces événements ainsi que les callback associées sont appelées dans le même thread. Ainsi, si tu crées une boucle infinie (ton while) avec une condition qui dépend d'un événement à venir (ici Boucler Tant que pas Mouse Release), tu ne recevras jamais cet événement car celui-ci ne sera traité qu'à la fin de ta fonction qui gère le while.
Plusieurs méthodes permettent de faire ce que tu souhaites, en voici 2 :
- tu crées un thread qui execute en boucle ton action à l'appui de souris, et tu stoppes ton thread au relacher de souris.
- tu crées un timer à l'appui de souris qui va répéter à une fréquence choisie ton action , et tu stoppes le timer au relacher de souris.
Marsh Posté le 22-11-2008 à 18:52:43
j'ai un bout de code qui se résume à ceci:
actuellement "mon action" s'exécute que lorsque je fais un click gauche... or, je voudrais qu'elle s'exécute en boucle tant que je garde appuyé !
j'ai bien tenté de remplacer le if par un while, mais si je fais ça le programme rentre dans une boucle infinie quand je fais un click
comment faire?