views:

110

answers:

4

I need help with WM_KEYDOWN, I want to remove the "pause" between the first keypress and the repeating keypresses.

If you continually hold down a button, I want the program to realize it directly.

Im trying to make a game with directx. Please tell me if I should use something else than WM_KEYDOWN.

+2  A: 

Please define “continually”. If user will press a button and release it immediately than you will get WM_KEYDOWN and WM_KEYUP event following immediately. Otherwise, if user does not release the key for some period of time, Windows will detect it using some internal timer and continue to fire WM_KEYDOWN events until a button is released.

You cannot do much about it because you have to wait some period of time in order to tell if a button is being pressed and not released.

What you can do, however, is disregard continuous WM_KEYDOWN events from Windows and treat button as being pressed and not released until you get a WM_KEYUP event. Let's call it a bet or, even better, a branch optimization.

Vlad Lazarenko
+2  A: 

This might not be exactly the behaviour you're after, but can't you simply ignore further WM_KEYDOWN messages until you receive a WM_KEYUP?

Oli Charlesworth
A: 

You can use boolean variables and set them to true when a key is down. If the variable's value is true, you stop doing the action. And when the key is up, you set the variable to false.

// ...
some switch
// ...
case WM_KEYDOWN:
    if (!keydown) {
        // do the magic
        keydown=true;
    }
break;
case WM_KEYUP:
    keydown=false;
break;

Of course if you want to do something continually, you should for example set a timer in the if (!keydown) statement and stop the timer when the user releases the key.

rhino
A: 

There is a flag coming with WM_KEYDOWN indicating if a WM_KEYDOWN is the first one or the repeated ones. Just search MSDN for WM_KEYDOWN you should be able to find it.

From MSDN: lParam bit 30: Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.

Codism