probleme minuscules majuscules

probleme minuscules majuscules - C - Programmation

Marsh Posté le 16-02-2014 à 09:36:26    

Bonjours a tous,
 
 Je cherche a donner un evenement different a une meme touche du clavier. par exenple, un evenement different a 'a' et 'A'. j ai utiliser :
 
if(GetAsyncKeyStat(65) == -3.......)  vie -= 30;
if(GetAsyncKeyStat(96) ==-3........)  vie -=50;  // je ne suis pas sure ici de la valeur en Ascii mais ce n ai pas le sujet du probleme.
 
en faite, avec ce code quand je clic sur 'a', l effet du 'A' se produit
En realite le programme ne prend en compte que la premiere ligne de code referent a une touche. Si je met le code ascii de 'a' en premier, quand je clique sur 'A' sa donne l effet du 'a'.
 
 Pouriez vous m aider en me donnant une methode pour que le programme differencit les majuscules et minuscules?  
Merci

Reply

Marsh Posté le 16-02-2014 à 09:36:26   

Reply

Marsh Posté le 16-02-2014 à 14:18:50    

1. Les points de suspensions montrent que le programme est incomplet.
Et ce n'est pas GetAsyncKeyStat, mais GetAsyncKeyState avec un "e" à la fin.
Avec un code trop parcellaire et faux, ce n'est pas facile de faire une analyse et de vous aider.
 [:carbon copy:4]  
2. Sous Windows, pour récupérer la saisie d'une lettre au clavier, l'usage n'est pas d'utiliser GetAsyncKeyState, mais de capturer le message WM_CHAR dans la fonction de gestion la boucle des messages ou l'équivalent en C++.
 [:roger95]  
3. GetAsyncKeyState a besoin en paramètre d'un virtual key code. Ils sont indiqué sur la page http://msdn.microsoft.com/en-us/li [...] s.85).aspx
Il y a le code pour le "A" majuscule, qui est bien 65 ou 0x41. Mais par contre, il n'y a pas le code pour le "a" minuscule. 96 est équivalent à 0x60, et pour cette valeur Microsoft note "Numeric keypad 0 key". Ca n'a rien à voir avec le "a" minuscule. D'ailleurs, il n'y a nul part le "a" minuscule dans la liste des virtual key code. C'est normal parce que c'est la même touche pour le "A" et pour le "a". C'est l'une des raisons pour lesquels, il ne faut pas utiliser GetAsyncKeyState, mais gérer WM_CHAR.
 [:hockeyy:3]  
4. Tester la valeur -3 n'est pas correct. La documentation dit "If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior".
 
Personnellement, je n'ai jamais eu besoin de la fonction GetAsyncKeyState en 20 ans de programmation Windows.
Je gère WM_CHAR ou WM_KEYDOWN, et parfois je complète l'information avec un GetKeyState pour savoir si une touche spéciale est active en même temps, par exemple pour la combinaison Control+Insert.

Reply

Marsh Posté le 16-02-2014 à 15:35:46    

Merci beaucoup olivthill pour votre réponse plus que détaillée qui va m’être d'une grande aide.
Je vais a présent me pencher sur WM_CHAR, GetKeyState et WM_KYDOWN pour résoudre mon problème.
Merci.
 
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed