GLUT touche vers le bas et la touche sur la touche CTRL
J'ai trouvé beaucoup d'informations sur l'utilisation de la SURABONDANCE de détecter si le Ctrl touche est pressée à l'aide de la GLUT_ACTIVE_CTRL macro. Cette macro ne fonctionne que, apparemment, à l'intérieur d'un clavier ou de la souris fonction de rappel. J'ai besoin de savoir si oui ou non le Ctrl touche à un point dans ma boucle principale, mais GLUT_ACTIVE_CTRL ne semble pas fonctionner dans ce contexte.
Alors, est-il un moyen de détecter les clés et principaux événements sur l' Ctrl clé (sans toutes les autres clés tapés) dans une plate-forme indépendante de GLUT-ish?
EDIT: Le clavier de rappel n'est pas déclenché (au moins pour une installation par défaut) lorsque l' Ctrl touche est enfoncée. C'est le problème de base, que je ne peux vérifier si le Ctrl clé est ou n'est pas pressé lorsqu'une autre touche est pressée et donc de déclencher le clavier de rappel.
Mon installation est quelque chose comme:
//... in main function:
glutKeyboardFunc(keyboard);
//later in the code:
void keyboard(unsigned char key, int _x, int _y)
{
printf("keydown \n");
if (glutGetModifiers() == GLUT_ACTIVE_CTRL) {
printf("control key is pressed.\n");
}
//etc.
Lorsque j'appuie sur le fonctionnement normal de caractère "keydown" est affichée sur la sortie standard. Quand j'ai appuyer sur la touche Ctrl clé, rien ne se passe. Si j'appuie sur Ctrl+C, "keydown touche contrôle enfoncée." est imprimé.
Cependant, dans ma boucle principale, j'ai ajouté:
if (glutGetModifiers() == GLUT_ACTIVE_CTRL) {
printf("Control key down.\n");
} else {
printf("Control key up.\n");
}
et il y a toujours des tirages "de la clé de Contrôle." peu importe si je suis appuyer sur la touche Ctrl ou pas.
OriginalL'auteur John | 2010-08-26
Vous devez vous connecter pour publier un commentaire.
Pas utiliser GLUT comme specced. Vous pouvez consulter GLFW.
OriginalL'auteur genpfault
- Je utiliser une fortune dans mon SURABONDANCE de l'application qui fait le tour. Le problème avec GLUT, c'est qu'il se rend compte seulement Ctrl ou Maj ou Alt pressé ensemble avec une autre clé. Cependant, la solution de contournement simule une permanence touche enfoncée en arrière-plan qui GLUT pouvez ramasser avec une touche de modification.
Vous pouvez mettre en œuvre cette idée en utilisant
SendInput
de lawindows.h
de la bibliothèque.simule un matériel de frappe. Cela fonctionne avec le
glutGetModifiers()
de rappel. Vous pouvez exécuter la simulation de course clé dans le fond de votre boucle, par exemple au sein de votre idlefunc et vous avez besoin de choisir une clé qui n'est pas dans l'utilisation régulière dans votre programme.Pour voir comment il fonctionne, ont d'abord la norme de rappel à l'intérieur de votre GLUT code de reconnaître l' Ctrl par le biais de
glutGetModifiers()
.Déclarer et définir la variable bool CTRLpress à l'échelle mondiale ou dans votre propre classe clavier comme un indicateur de la touche CTRL enfoncée (1) ou libéré (0). Assurez-vous que la fonction checkModifiers() est appelée à partir de l'intérieur de votre
glutKeyboardFunc
comme d'habitude.Maintenant lancer un objet d'ENTRÉE à l'intérieur de votre code principal:
Enfin, mettez à l'intérieur de votre
glutIdleFunc
un appel normal qui simule une pression continue sur une touche:Lorsque vous appuyez sur Ctrl seul, sans aucune autre touche enfoncée, le code déclenche CTRLpressed à 1. Sinon, lorsqu'il est libéré CTRLpressed devient (Vous pouvez en outre étendu votre propre modificateur de classe pour vaincre d'autres GLUT défauts - comme des difficultés dans la détection Ctrl +Nombre.)
Cela fonctionne avec moi bien et je n'ai pas trouvé d'autres inconvénients que d'avoir à sacrifier une clé.
OriginalL'auteur Majte
Dans le gestionnaire d'événement enregistrer le paramètre de la clé. Vous pouvez ensuite exposer que le stockage à lire à partir de votre boucle principale.
Au moins, ils ne sont pas licenciés dans la configuration par défaut.
OriginalL'auteur Jay