Нужна помощь с WM_KEYDOWN - PullRequest
       1

Нужна помощь с WM_KEYDOWN

1 голос
/ 31 августа 2010

Мне нужна помощь с WM_KEYDOWN, я хочу убрать «паузу» между первым и повторным нажатием клавиш.

Если вы постоянно удерживаете кнопку, я хочу, чтобы программа реализовала ее напрямую.

Я пытаюсь сделать игру с DirectX. Пожалуйста, скажите мне, если я должен использовать что-то еще, чем WM_KEYDOWN.

Ответы [ 4 ]

2 голосов
/ 01 сентября 2010

Это может быть не совсем то поведение, за которым вы следите, но вы не можете просто игнорировать дальнейшие WM_KEYDOWN сообщения, пока не получите WM_KEYUP?

2 голосов
/ 01 сентября 2010

Пожалуйста, определите «постоянно». Если пользователь нажмет кнопку и сразу отпустит ее, вы сразу же получите событие WM_KEYDOWN и WM_KEYUP . В противном случае, если пользователь не отпускает ключ в течение некоторого периода времени, Windows обнаружит его с помощью внутреннего таймера и продолжит генерировать события WM_KEYDOWN до тех пор, пока кнопка не будет отпущена.

Вы не можете ничего с этим поделать, потому что вам нужно подождать некоторое время, чтобы определить, нажата ли кнопка и не отпущена ли она.

Однако вы можете игнорировать непрерывные WM_KEYDOWN события из Windows и обрабатывать кнопку как нажатую и не отпущенную до тех пор, пока не получите WM_KEYUP событие. Давайте назовем это ставкой или, что еще лучше, оптимизацией филиала.

1 голос
/ 01 сентября 2010

Вы можете использовать логические переменные и установить их в значение true, когда клавиша нажата. Если значение переменной равно true, действие прекращается. И когда клавиша поднята, вы устанавливаете переменную в false.

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

Конечно, если вы хотите что-то делать постоянно, вы должны, например, установить таймер в операторе if (! Keydown) и остановить таймер, когда пользователь отпускает ключ.

0 голосов
/ 01 сентября 2010

Идет флаг с WM_KEYDOWN, указывающий, является ли WM_KEYDOWN первым или повторным.Просто найдите в MSDN WM_KEYDOWN, и вы сможете его найти.

Из MSDN: lParam, бит 30: указывает предыдущее состояние ключа.Значение равно 1, если клавиша выключена перед отправкой сообщения, или ноль, если клавиша нажата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...