Aide sur code en C

bvdecky Messages postés 3 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 23 mai 2008 - 21 mai 2008 à 16:32
cs_saifer Messages postés 115 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 19 décembre 2008 - 23 mai 2008 à 13:37
salut à tous
je recherche un exemple de code source en C qui consiste à récupérer les deux informations XY (déplacement) ainsi que les 2 boutons  (gauche et droite) d'une souris 
merci d'avance et bonne journée à tous

3 réponses

glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
21 mai 2008 à 23:48
Bonsoir,
Je pense qu'il faut programmer en mode graphique pour ça (et pas en mode console). je n'ai pas de code sous la main, mais windows renvoi des événements lorsque l'utilisateur clique avec la souris, ou bouge la souris. Tu peux regarder peut etre les evenements :
WM_MOUSEMOVE
WM_KEYDOWN

-------------------------------------
case WM_MOUSEMOVE:
{
            xPos = LOWORD(lParam);
            yPos = HIWORD(lParam);
}
-------------------------------------

Sinon, il y a la fonction GetCursorPos() je crois qui doit donner les coordonnées de la souris dans l'ecran.

Voila, je ne sais pas si ça t'aide beaucoup mais peut-être un peu.
0
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
21 mai 2008 à 23:57
Peut être que ça peut t'aider :

Bonjour à tous le forum,


Je suis toujours un débutant en C++. Je pose mon code ci-dessous, si
cela peut aider quelqu'un. En gros, le code permet de faire une mesure
de distance entre deux cliques droit de souris. Cette application
permet au gens de mon labo de faire des mesures sur une image acquise
en continue (elle n'est pas figée). Les deux premiers clique droit sont
pour l'étalonnage, on entre ensuite la taille de l'échelle et on peut
ensuite faire les mesures.

code:


#include


#include <cmath>


#include <windows.h>


///////////////////////////////////////////////////////////////////////////////


//*****auteur: Laurent **********************************************//


//**** Projet: Mesures ************************************//


//*****date: Decembre 2006***************************************************//


///////////////////////////////////////////////////////////////////////////////


int main()


{//1


BOOL Continue = TRUE; //Controle pour la boucle


POINT pos; //loge les coordonnées X et Y dans Pos


const SHORT Mask = 32768;


int a;


int x1;


int y1;


int x2;


int y2;// coordonnées pour calcul de l'échelle


int x3;


int y3;


int x4;


int y4;


int entier; //si chiffre pair "entier 0" si entier est impair 1


int X; //pour le calcul de la distance


int Y;//pour le calcul de la distance


double dist;


int n1;


int n2;


int echelle;


double dist1;


double distance; //distance réelle en µm


a=0;//initialisation du compteur


while (Continue)


{//2


if (GetKeyState(VK_ESCAPE)& Mask)


{


Continue = FALSE;


}


if (GetKeyState(VK_LBUTTON)& Mask)


{//3


a++;


entier=a%2;//verif si chiffre pair ou impair


Sleep(200);


if (a==1){ //premier clique


GetCursorPos(&pos);


x1=pos.x;


y1=pos.y;


std::cout << "X " << x1 << " et Y " << y1 <<"\n";


Sleep(200);


}


if (a==2){ //deuxième clique


GetCursorPos(&pos);


x2=pos.x;


y2=pos.y;


std::cout << "X " << x2 << " et Y " << y2 <<"\n";


Sleep(200);


n1=((x2-x1)*(x2-x1));


n2=((y2-y1)*(y2-y1));


dist=sqrt(n1+n2);//distance de l'échelle


// Dans la variable echelle, on récupère sa taille


std::cout << "Veuillez entrer la taille de l'echelle:"<<"\n";


std::cin>>echelle;


}


if (a>2)


{


//clique paire


if (entier==0)


{


GetCursorPos(&pos);


x4=pos.x;


y4=pos.y;


std::cout << "X " << x4 << " et Y " << y4
<<"\n";


Sleep(200);


X=((x4-x3)*(x4-x3));


Y=((y4-y3)*(y4-y3));


dist1=sqrt(X+Y);// racine carrée"sqrt"


//La distance en µm est de:


distance = ((dist1*echelle)/dist);


std::cout <<"\n"<<"La mesure est de = " << distance
<<"\t"<<"micrometres"<< "\n";


}


}


if (a>2)


{ //clique impaire


if (entier==1)


{


GetCursorPos(&pos);


x3=pos.x;


y3=pos.y;


std::cout <<"\n" <<"X = " << x3 << " et Y = "
<< y3 <<"\n";


Sleep(200);


}


}


} //3


}//2


return 0;


}//1


-J'aimerai lors du deuxième clique, tracer
une ligne de couleur verte à l'écran qui correspond à la distance
mesurée. Si vous avez des idées, pour me mettre sur une piste je suis
preneur.


Je reprécise que je suis débutant en C++.


Bonne journée,


Antik
0
cs_saifer Messages postés 115 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 19 décembre 2008 1
23 mai 2008 à 13:37
Salut,

Si ce que tu veux c'est récupérer les mouvements et les clics de souris, mais pas pour ton programme, donc globalement pour le système, tu dois utiliser les hooks. Beaucoup d'exemples sur le site en tapant simplement "hook windows".
Si tu ne veux récupérer les infos de la souris que pour ton programme, tu dois traiter les messages WM_MOUSEMOVE, WM_LBUTTONDOWN(/UP), WM_RBUTTONDOWN(/UP), si mes souvenirs sont bons. Cette dernière possibilité n'est utilisable que si tu programme en mode graphique (si tu as une fenêtre à laquelle les évènements windows sont envoyés) et pas console.
Mais à mon avis ce que tu cherches à faire d'après ta (trop) courte description, c'est un hook sur la souris. Donc 1ère solution.

J'éspère que j'aurais pu t'éclairer un peu.
0
Rejoignez-nous