Comparer la position du curseur à 2 instants différents

Résolu
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007 - 25 mai 2006 à 18:44
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007 - 27 mai 2006 à 11:47
Salut,

je cherche, grâce aux APIs windows, à connaitre et comparer la position du curseur à 2 instants différents et quand le bouton gauche est enfoncé. C'est pour scroller mon programme enfaite. Vous auriez une idée de comment faire svp ?

ala, merci tout l'monde :D

15 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 mai 2006 à 22:23
Justement, le premier coup tu prends x1 et y1 et leu deuxième, x2 et y2:

BOOL firstTime = TRUE;

case WM_LBUTTONDOWN:
if(firstTime)
{
x1 = LOWORD(lParam);
y1 = HIWORD(lParam);
}
else
{
x2 = LOWORD(lParam);
y2 = HIWORD(lParam);

if(x1!=x2 || y1!=y2)
MessageBeep(0);
}
firstTime ^= 1;
break;
3
24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
25 mai 2006 à 20:44
regarde dans msdn les messages :
   - WM_LBUTTONDOWN (tu as X dans LOWORD(lParam) et Y dans HIWORD(lParam))
   - WM_LBUTTONUP
   - WM_MOUSEMOVE

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_lbuttondown.asp

++
24K
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
25 mai 2006 à 20:57
Merci mais enfaite je connais ces messages, le problème c'est que je sais pas comment comparer 2positions différentes à partir de ces messages. J'suis sûr que la soluce doit etre toute conne, mais bon faut croire que je suis mauvais c'est tout ^^
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 mai 2006 à 21:20
Tu savegarde dans une variable le premier coup, comme ca tu l'a sous la main quand tu en as besoin pour faire la "comparaison"
C'est tellement évident que je me demande si j'ai bien compris ton problème
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
25 mai 2006 à 22:19
Oui je comprend qu'il faut que je fasse un teste grâce à 2 couples de variables, mais le problème c'est que je sais pas où faire le premier coup. Parce que si je fais ca dans le message WM_LBUTTONDOWN, comme ca :

        case WM_LBUTTONDOWN:
             x1 = LOWORD(lParam);
             y1 = HIWORD(lParam);
             x2 = LOWORD(lParam);
             y2 = HIWORD(lParam);
            
             if(x1!=x2 || y1!=y2)
              MessageBeep(0);

             break;

Ca ne pourra jamais marcher vu que les 2 couples de variables seront remplis au même moment et auront donc les mêmes valeurs.
Il faut comprendre que la différence ne peut etre que de 1 ou -1 en x et en y parce que je veux faire cette comparaison qu'à partir du moment où le bouton gauche de la souris est enfoncé(moment T1). Et le moment T2 serait donc quand je bouge.

J'espère que vous voyez sur quoi je bugge
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
25 mai 2006 à 22:40
J'avais meme pas pensé au booléen !  J'ai honte de moi lol

merci ;)
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
25 mai 2006 à 22:47
euh par contre un tit probleme là. Pour savoir comment calculer la différence, j'affiches les 4 valeurs x1 x2, y1 y2. Sauf que pour x1 et y1 j'obtient des nombres du genre 20122245565. J'crois pouvoir dire sans trop de mal que c'est pas normale

vous sauriez d'où ca vient ? Mon code =>

       case WM_MOUSEMOVE: 
            
             switch(wParam){
             case MK_LBUTTON:
                  
                  if(firstTime)
                  {
                      X1 = LOWORD(lParam);
                      Y1 = HIWORD(lParam);


                      firstTime = false;
                  }
                  else
                  {
                      X2 = LOWORD(lParam);
                      Y2 = HIWORD(lParam);
                               
                      if(X1!=X2 || Y1!=Y2)
                      {
                        char pt[20];
                        wsprintf(pt, "%i et %i, %i et %i", X1, Y1, X2, Y2);
                        MessageBox(hwnd, pt, "points", MB_OK);                        
                        
                        X1 = LOWORD(lParam);
                        Y1 = HIWORD(lParam); 
                      }
                       
                  }


                  break;
                
             }
             break;

merci
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 mai 2006 à 22:49
pour imprimer un entier c'est %d, pas %i
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
25 mai 2006 à 22:51
Bah j'ai toujours fais %i, et ca a toujours marché. %d c'est pas pour double+int plutot ?

bref ca revient au meme
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 mai 2006 à 22:56
C'est pas parce tes coordonnées sont négatives par hasard?
Essaie d'utiliser MAKEPOINTS (ou bien: short X1 = (short)LOWORD(lParam); etc)
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
26 mai 2006 à 19:57
Ah oui c'est vrai que je m'apercoit que quand je met des short, les valeurs de X1 et Y1 sont 30 673 et -30 678, systématiquement. J'comprends pas ...
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
26 mai 2006 à 20:54
Voilà j'ai enfin réussi ! c'était tout con, fallait juste pas déclarer les short dans le "WindowProc"

merci, a+
0
cs_eRoZion Messages postés 241 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 8 octobre 2007 1
27 mai 2006 à 04:17
Salut,
j'vois pas d'où viens l'erreur, avec plus de code peut-etre, mais %i ou %d c'est exactement la meme chose.

d    Integer    signed decimal integer
i    Integer    signed decimal integer

Source :   Borland C++ User's Guide

Sinon essaie de mettre :
char pt[28];
et
wsprintf(pt, "%i et %i, %i et %i\0", X1, Y1, X2, Y2);

A+

eRoZion
0
cs_eRoZion Messages postés 241 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 8 octobre 2007 1
27 mai 2006 à 04:26
Désolé,
j'ai répondu sans voir que le problème était solutionné, je fais toujours l'erreur avec les posts étalés sur plusieurs pages.

Ceci dit, "char pt[28];" n'est pas inutile car
"1200 et 1000, 1210 et 1010" ca fait 26 caractère et 27 avec le 0 de fin, donc 28 pour l'alignement.

++

eRoZion
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
27 mai 2006 à 11:47
Merci quand meme. Mais le probleme n'était pas l'affichage des variables grâce à un MessageBox(), mais la validité des données dans ces variables.
Enfaite, plutot que de déclarer les variables en dehors du WindowProc, ce qui est la solution "facile" disons, il faut juste déclarer les variables en static

 ++
0
Rejoignez-nous