cs_fignon
Messages postés4Date d'inscriptionvendredi 1 juillet 2005StatutMembreDernière intervention24 septembre 2007
-
24 sept. 2007 à 11:52
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 2014
-
24 sept. 2007 à 19:16
Bonjour à tous,
Je suis en train de développez une application ou j'aurais besoin d'éxecuter une action lorsque la touche entrée est enfoncée. J'ai utiliser le code suivant pour tester son bon fonctionnement :
Cela fonctionne mais uniqument au lancement du programme.
Dès que j'appuie sur un bouton ou effectue une autre action le WM_KEYDOWN n'est plus "vu" par le programme.
Sauriez vous d'où provient cette erreur ?
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 24 sept. 2007 à 13:02
Oui quand tu sélectionnes un contrôle tu lui donne le focus clavier et donc l'événement est traité par la wndproc du contrôle. Pour récupérer quand même l'appui sur une touche tu dois sous-classer le contrôle (lui donner une nouvelle fonction WndProc, se fait avec SetWindowLongPtr et GWLP_WNDPROC, et CallWndProc pour rappeller l'ancienne), regarde MSDN ou SDK pour plus d'infos.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 24 sept. 2007 à 19:16
Salut,
Comme expliqué par juju12, ta fenêtre cessera de recevoir WM_KEYDOWN car elle n'a plus le focus. Ce dernier est passé dans un de tes controles. C'est tout à fait normal. Si tu veux intercepter juste la trouche Entrée, tu n'aura besoin ni de sous-classement ni de hook. J'ai déjà répondu à ce genre de questions plusieurs fois dans ce forum:
http://www.cppfrance.com/infomsg_CASE-WM_KEYDOWN-MARCHE-PAS-QUAND-JE-SUIS-DANS_998943.aspx