Modifica soglia chiave di ripetizione c ++
Domanda
Sto costruendo un gioco tetris c ++ (non c ++ .Net). Sento che i miei controlli sono strani. Voglio farlo in modo tale che quando l'utente preme uno dei tasti freccia, circa 10ms di tenerlo premuto avvierà la funzione di ripetizione di Windows. L'impostazione predefinita è di circa 500 ms ed è troppo ritardata per il mio gioco. Come posso impostare la velocità con cui cambia dal keydown al keydown di ripetizione? Non quante volte al secondo si ripete.
Grazie
* Quello che voglio fare è cambiare il ritardo di ripetizione in breve
Nel pannello di controllo nelle impostazioni della tastiera è presente la frequenza di ripetizione, come si imposta?
Soluzione
In genere ciò che faresti per questo è invece di reagire al messaggio WM_CHAR
che è soggetto alle normali impostazioni di ripetizione dei tasti, dovresti cercare WM_KEYDOWN
e WM_KEYUP
e agisci basato su un timer che hai in esecuzione. Ad esempio, se imposti il ??timer per attivarsi ogni 50 ms, puoi ripetere ogni 50 ms e comunque eseguire immediatamente la prima azione quando viene visualizzato il messaggio WM_KEYDOWN
.
Altri suggerimenti
Secondo MSDN, sembra anche che potresti usare il SystemParametersInfo function e chiama use SPI_SETKEYBOARDSPEED, SPI_SETKEYBOARDDELAY.
void Key_Set () { DWORD vecchio = 0;
SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, &old, 0);
SystemParametersInfo(SPI_SETKEYBOARDDELAY,0, &old, 0);
}