Recuperer l'etat du bouton de la souris [Résolu]

kor6k 13 Messages postés lundi 29 novembre 2004Date d'inscription 4 février 2008 Dernière intervention - 3 mai 2006 à 10:51 - Dernière réponse : ridjy 5 Messages postés mardi 17 mai 2005Date d'inscription 3 mai 2007 Dernière intervention
- 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
Afficher la suite 

5 réponses

Répondre au sujet
kor6k 13 Messages postés lundi 29 novembre 2004Date d'inscription 4 février 2008 Dernière intervention - 3 mai 2006 à 13:03
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de kor6k
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 3 mai 2006 à 11:17
0
Utile
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;<
Commenter la réponse de cs_Joky
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 3 mai 2006 à 18:24
0
Utile
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
Commenter la réponse de SAKingdom
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 3 mai 2006 à 18:41
0
Utile
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
Commenter la réponse de vecchio56
ridjy 5 Messages postés mardi 17 mai 2005Date d'inscription 3 mai 2007 Dernière intervention - 4 avril 2007 à 15:37
0
Utile
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
Commenter la réponse de ridjy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.