2009-09-17 5 views
1

Je construis un jeu de tetris C++ (pas C++ .Net). Je sens que mes contrôles sont bizarres. Je veux faire en sorte que lorsque l'utilisateur appuie sur l'une des touches fléchées, environ 10ms de la maintenir enfoncée va démarrer la fonction de répétition des fenêtres a. Il est réglé à environ 500 ms par défaut, et il est trop lent pour mon jeu. Comment puis-je régler la vitesse à laquelle il change du clavier au répétition du clavier? Pas combien de fois/sec ça se répète.Changer le seuil de la clé de répétition C++

Merci

* ce que je veux faire est de changer le délai de répétition à court

Dans le panneau de contrôle dans les paramètres du clavier il y a repeat rate, comment puis-je ceci?

+0

Selon http://www.gamedev.net/community/forums/topic.asp?topic_id=540095, il est dit que WM_KEYDOWN ne gère pas les répétitions mais WM_CHAR fait. Vous le savez peut-être déjà, mais j'ai pensé que je le mentionnerais ici car ils sont en train de discuter de ce sujet. –

+0

Cette question est très similaire à celle que vous avez posée: http://stackoverflow.com/questions/1429472/change-speed-of-keystroke-c –

Répondre

8

En général ce que vous feriez pour cela est au lieu de réagir au message WM_CHAR qui est soumis aux paramètres de la répétition des touches normales, vous chercheriez WM_KEYDOWN et WM_KEYUP, et prendre des mesures en fonction d'un timer que vous avez J'ai couru. Si vous réglez la minuterie pour qu'elle se déclenche toutes les 50 ms par exemple, vous pouvez répéter toutes les 50 ms et prendre immédiatement la première action dès que vous obtenez le message WM_KEYDOWN.

+0

Cela dit, il est probablement préférable de changer les paramètres système par programme. –

-1

Selon MSDN, il semble également que vous pouvez utiliser le SystemParametersInfo function et appeler SPI_SETKEYBOARDSPEED, SPI_SETKEYBOARDDELAY.

+5

Bien qu'il soit possible de modifier les paramètres de l'utilisateur de cette manière, je trouverais inacceptable qu'une seule application modifie la façon dont les paramètres de répétition du clavier sont configurés. –

+0

Assurez-vous que les anciens paramètres sont réinitialisés lorsque l'appilcation se termine – jmasterx

+2

Sérieusement, ne faites pas cela. Je serais très fâché si n'importe quelle application a changé mes réglages personnels. – GManNickG

-5

void Key_Set() { DWORD ancien = 0;

SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, &old, 0); 


SystemParametersInfo(SPI_SETKEYBOARDDELAY,0, &old, 0); 

}

+5

** Ne faites pas ceci. ** Pourquoi votre application est-elle si importante que de changer les paramètres sur mon ordinateur? Utilisez simplement le bon message, comme Greg l'a montré. – GManNickG

Questions connexes