bvdecky
Messages postés3Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention23 mai 2008
-
21 mai 2008 à 16:32
cs_saifer
Messages postés115Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention19 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
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 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
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 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.
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.
cs_saifer
Messages postés115Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention19 décembre 20081 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.