[MFC] Mouvement de la souris...

Mouvement de la souris... [MFC] - C++ - Programmation

Marsh Posté le 19-04-2003 à 05:55:23    

Bonjour,
Je suis confronté a un petit problème dans la création d'un control personnel.
 
Je cherche un moyen de lancer une boucle tant que le bouton de la souris est enfoncé.
 
Un peu dans ce style :
 

Code :
  1. while(!isButtonDown())
  2. {
  3.    // Captuer la position de la souris
  4.    CPoint  pt = GetMousePosition();
  5.    if(PtInRect(Pt, MyRect))
  6.    {
  7.    }
  8. }


 
J'ai bien hérité les fonctions OnLButtonUp, OnLButtonDown, OnMouseMove mais le problème est qu'un evenement n'est envoyé que si la souris bouge.
 
Je crée une espèce de fusion entre une ListBox Normal et une ListCtrl+report+headers.
 
Si click enfoncé et que le curseur sort du control, alors je fais défiler la liste jusque qd le bouton est relâché (ca marche mais uniquement qd la souris bouge, ce qui n'est pas du tout interessant dans mon cas).
 
Merci de votre aide...

Reply

Marsh Posté le 19-04-2003 à 05:55:23   

Reply

Marsh Posté le 19-04-2003 à 12:20:01    

soit plus clair, la c'est trop incomprehensible.
 
juste un truc : ca depend de ce que IsButtonDown() fait, mais en theorie faut eviter ce genre de choses, pasque tant que tu restes dans le while et si ce dernier est dans le thread principal, bah tu bloques tous tes autres handlers.

Reply

Marsh Posté le 20-04-2003 à 02:11:13    

Konar a écrit :

soit plus clair, la c'est trop incomprehensible.
 
juste un truc : ca depend de ce que IsButtonDown() fait, mais en theorie faut eviter ce genre de choses, pasque tant que tu restes dans le while et si ce dernier est dans le thread principal, bah tu bloques tous tes autres handlers.


 
En faite, j'essaie d'importer sur PC une série de travaux donc certains controles que j'avais développés sur Mac.
 
Lorsque tu sorts d'une listcontrole normal tout en restant avec le click gauche enfoncé, ta liste défile automatiquement pour te montrer les éléments du bas ou haut qui en temps normal pour les voire, tu aurais dû chipoter au ControlBar de la listbox.
 
Le problème est que les choses sont légèrement différentes sur PC que sur Mac.
 
Sur mac qd un clickdown était effectué, je recevais l'appel et je gérais tout moi même à partir de là :
 

Code :
  1. pascal ControlPartCode ListBoxPaneHitTestProc(ControlRef theControl, Point where)
  2. {
  3.   while(!isButtonDown())
  4.   {
  5.     // 1 Vérifie où le click s'est passé
  6.     // 2 Valide et dessine la liste avec les nv paramètres  
  7.     //   dans mon buffer.
  8.     // 3 Affiche le tout dans la fenêtre., donc sans passer par
  9.    // OnPaint et compagnie.
  10.   }
  11.   // Ici tout revenait à la normal...
  12. }


 
Sur PC, je dois créer une variable de type BOOL et la true fier  :D qd ButtonDown est appelé et la false ier qd ButtonUp est appelé.
Pour les mouvements, tous ce passe dans MouseMove mais comme sont nom l'indique, ce n'est appelé que qd la souris bouge.
 
Donc qd mon curseur sort de la liste, la liste défile uniquement qd le curseur bouge (je veux que ca continue à bouger sans mouvement).
 
Cela dit, j'ai une astuce, utiliser OnTimer mais c'est vachement bricolage.
 
Voilà...


Message édité par iS@mi le 20-04-2003 à 02:14:11
Reply

Marsh Posté le 20-04-2003 à 02:18:38    

Cela dit, j'ai remarqué que le MFC Grid control de Chris Maunder regroupait certaines fonctions que j'ai besoin d'introduire dans ma ListCtrl spéciale.
Je pense trouver mon bonheure là dedans.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed