Recuperer l'etat du bouton de la souris

Résolu
kor6k Messages postés 13 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 4 février 2008 - 3 mai 2006 à 10:51
ridjy Messages postés 5 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 mai 2007 - 4 avril 2007 à 15:37
bonjour,
Je crois que mon titre est assez explicite mais je vais quand même apporter plus de précisions:
Je suis en train de creer une classe bouton pour pouvoir personnaliser mes boutons.
J'ai fait dans cette classe un timer qui toutes les 100 ms regarde l'etat de la souris et en fonction de ça, dessine le bouton comme il convient. par exemple, avec GetCursorPos et GetWindowRect, je peux savoir si le curseur est sur mon bouton.
Par contre, je n'arrive pas à savoir si le bouton de ma souris est enfoncé ou non... existe t-il une fonction pour ça?
merci

5 réponses

kor6k Messages postés 13 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 4 février 2008
3 mai 2006 à 13:03
merci mais j'ai déjà trouvé la réponse:
il faut utiliser GetAsyncKeyState:
    bLeftButton = (GetAsyncKeyState(VK_LBUTTON) & 0x8000);
    bRightButton = (GetAsyncKeyState(VK_RBUTTON) & 0x8000);
    bMiddleButton = (GetAsyncKeyState(VK_MBUTTON) & 0x8000);
si dans la valeur de retour le bit le plus fort est positionné ça voudra dire que la touche est enfoncée .
d'ou le test à 0x8000 (32768)
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
3 mai 2006 à 11:17
Compliqué ton histoire pour voir si le pointeur est au dessus de ton bouton

Donc bé moi je propose WM_LBUTTONDOWN
WM_MOUSEMOVE pour voir si le pointeur est sur le bouton

Sinon direction Msdn et recherche sur Mouse Input Overview
if(!Meilleur("Joky")) return ERREUR;<
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
3 mai 2006 à 18:24
Ben si tu travail avec l'API windows, je vois pas pourquoi tu utilise pas la méthode de joky. C'est la meilleur pour l'API win32. Et en plus, cette méthode assure une continuité des informations (en gros ça veut dire que c'est pas tester seulement toute les 100ms mais c'est une commande qui est envoyer au programme. Donc c'est quasi instantané(quasi car il peut y avoir d'autre commande dans la chaine)). Je sais pas si tu comprend tout ce que je vien de dire.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
3 mai 2006 à 18:41
Pour ma part, j'ai aussi passé pas mal de temps a chercher ca, avant de me rendre compte que c'était GetAsyncKeyState qu'il fallait utiliser. Ils sont gentils, GetAsyncKeyState est dans la section Keyboard, mais pas Mouse...
Mais effectivement ici, quand le pointeur est au dessus du bouton, tu recois un WM_MOUSEMOVE, ainsi que WM_SETCURSOR
0

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

Posez votre question
ridjy Messages postés 5 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 mai 2007
4 avril 2007 à 15:37
Bonjour à  tous,
j'ai un gros soucis avec visual 2005 en C++.
j'ai développé un programme d'acquisition à distance. Je lance l'acquisition en cliquant sur un simple bouton mais je dois l'arrêter à distance avec une télécommande sans fil géré par windows comme une souris en double cliquant sur le click droit. Le problème étant que je suis coincé dans mon sous programme "acquisition()" et que je ne vois pas les changement de l'état de la souris. Comment faire? J'ai tenté les

while(!(GetAsyncKeyState(VK_RBUTTON ) && GetAsyncKeyState(VK_RBUTTON )))
{
      //acquisition
// c'est ici que restes coincé mon programme
}

visual me dit : 1>acquisition.obj : error LNK2028: jeton non résolu (0A00007B) "extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z) référencé dans la fonction "void __clrcall acquit(class global)" (?acquit@@$$FYMXVglobal@@@Z)

merci d'avance pour votre aide
0
Rejoignez-nous