2010-10-31 4 views
1

Je développe un jeu Tetris en utilisant C++ en combinaison avec les anciens WinAPI, GDI et GDI +. La fenêtre des applications contient quelques contrôles d'interface utilisateur avec un contrôle statique utilisé pour peindre l'état du jeu. J'utilise un crochet de clavier pour que je puisse répondre aux touches fléchées pour déplacer le bloc actuel et la barre d'espace pour laisser tomber le bloc. Toutefois, les séquences de touches affectent également l'interface utilisateur. Le déplacement des touches fléchées peut modifier l'état de sélection de la radio ou de la zone de liste déroulante et appuyer sur la barre d'espacement peut déclencher un bouton ou une case à cocher, selon le contrôle en cours.Comment empêcher les touches fléchées de changer l'état de l'interface utilisateur?

Existe-t-il un moyen d'empêcher cela de se produire? Mon hack temporaire consiste à forcer le focus sur une zone de texte cachée. J'apprécierais une solution plus propre.

Répondre

1

Si vous utilisez un hook WH_KEYBOARD_LL ou WH_KEYBOARD, vous pouvez renvoyer 1 à partir de hookproc pour empêcher la transmission de la clé au reste du système. Ne pas appeler le hookproc suivant dans ce cas. Cependant, cela pourrait faire des ravages avec les choses qui utilisent des crochets et viennent après vous dans la chaîne de crochet.

Si vous écrivez une application GDI, vous avez déjà une boucle de message, y a-t-il une raison pour laquelle vous n'utilisez pas la boucle de message pour rechercher les messages KEY_UP/KEY_DOWN?

Vous pouvez définir d'autres contrôles afin qu'ils ne prendront pas attention ...

+0

Manipuler les événements directement à partir de la boucle de message ne semble pas une mauvaise idée. Je vais essayer. – StackedCrooked

1

Est-ce un vrai crochet (serti SetWindowsHook)? Si c'est le cas, vous pouvez renvoyer une valeur non nulle à partir de hookproc lorsque vous manipulez le message, et Windows ne transmettra pas le message à la boîte de dialogue.

+0

Oui, c'est un WH_KEYBOARD. Merci. – StackedCrooked

Questions connexes