Problème pour récupérer la position de la souris en permanance

Résolu
pcrafale Messages postés 8 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 30 mars 2006 - 18 oct. 2005 à 17:19
pcrafale Messages postés 8 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 30 mars 2006 - 19 oct. 2005 à 10:48
Bonjour,

J'ai un problème. Je programme en MFC sous VS.net. J'ai une fenêtre CDialog et je voudrai récupérer en permanence la position du pointeur.
J'arrive à obtenir la position dès que j'appelle une fonction.
Comment créer une fonction qui est lue en permanence par le programme?

Sinon j'ai peut être une autre solution, récupérer la position du pointeur après un double clic sur bouton droit ou gauche. Mais comment lancer une fonction et comment détecter le double clic.

J'ai trouvé pas mal de fonction sur MSDN ou sur le net mais rien ne m'aide.

Si quelqu'un peu m'aider!!!!!!

2 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
19 oct. 2005 à 10:05
Plusieurs solutions possibles.

-Si ce n'est que le clic qui t'interresse, fait un hook sur la souris puis intercepte les boutons gauche et droit. Ainsi tu pourras apeller ta fonction par un Callback sur ton exe.

-Solution plus simple:
Tu crées un timer dans ton application, tu le regle par exemple sur 500ms, et tu appelles l'API GetCursorPos pour récuperer les coordonnées de la souris.
Regarde dans mes codes tu auras un exemple de timer.

Shell
3
pcrafale Messages postés 8 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 30 mars 2006
19 oct. 2005 à 10:48
Merci. Je viens de trouver une solution dans un exemple visual. Pour info: cf sample autoclik

J'ai suivi la démarche suivante:

dans fichier cpp:


BEGIN_MESSAGE_MAP(CCampagne, CDialog)
ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()


void CCampagne::OnLButtonDown(UINT nFlags, CPoint point)


{


DWORD dx=0;


DWORD dy=0;


POINT pos;


GetCursorPos(&pos);


x=pos.x;


y=pos.y;


X.Format("%d",(
int)x);


m_RED.SetWindowText(X); // Variable de la zone d'affichage


Y.Format("%d",(
int)y);


m_GREEN.SetWindowText(Y); // Variable de la zone d'affichage


}

Dans le fichier .h


protected:


afx_msg
void CCampagne::OnLButtonDown(UINT nFlags, CPoint point);

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

Voilà.

Merci à toi pour ta réponse.
3