Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2860 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  exécuter fonction tant que click gauche souris enfoncé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

exécuter fonction tant que click gauche souris enfoncé

n°1815356
xphanoo
Posté le 22-11-2008 à 18:52:43  profilanswer
 

:hello:  
 
j'ai un bout de code qui se résume à ceci:

Code :
  1. LRESULT CSampleMapDlg::OnKeyboardNotify(WPARAM wParam, LPARAM lParam)
  2. {
  3.           if ((wParam == KBDNOTIFY_LBUTTONDOWN){ mon action.... }
  4. }


 
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?  :(

mood
Publicité
Posté le 22-11-2008 à 18:52:43  profilanswer
 

n°1815358
Profil sup​primé
Posté le 22-11-2008 à 18:59:35  answer
 

y'a pas un évenement quand on lache le bouton de la souris ?

n°1815360
xphanoo
Posté le 22-11-2008 à 19:07:24  profilanswer
 

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 :
  1. LRESULT CSampleMapDlg::OnKeyboardNotify(WPARAM wParam, LPARAM lParam)
  2. {
  3.            if (wParam == KBDNOTIFY_LBUTTONDOWN){ mon action.... }
  4.            if (wParam =! KBDNOTIFY_LBUTTONDOWN) { autre action....}
  5. }


 
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)


Message édité par xphanoo le 22-11-2008 à 19:08:19
n°1815837
xilebo
noone
Posté le 24-11-2008 à 15:10:33  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  exécuter fonction tant que click gauche souris enfoncé

 

Sujets relatifs
fonction de hashagecallback lors de l'utilisation de la fonction "_"
Utilisation de la fonction "include()"Au click, remplacer un div par un autre
[résolu] aide sur une fonction[SQL] Faire ressortir une liste de donnée en fonction d'un champ
Souris avec fleurettes en ribambelleexecuter une seule fois/Mois
Débutant, souhaite réaliser fonction simple :)fonction simple return
Plus de sujets relatifs à : exécuter fonction tant que click gauche souris enfoncé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR