Aide sur code en C

Signaler
Messages postés
3
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
23 mai 2008
-
Messages postés
115
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
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

Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
1
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.
Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
1
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
Messages postés
115
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2008
1
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.