C ++中的Keypress事件

时间:2011-04-02 12:25:06

标签: c++ winapi events keypress keydown

我目前正在使用GetAsyncKeyState()来检测Keydown事件,但是当你按住键时会重复这些事件。

阻止事件重复的简单方法是什么?


示例

如果我按住键盘上的键i一段时间,我会得到这样的输出:

iiiiiiiiiiiiiiiiiiiiiiiii

而不是:

i


我想强制用户再次按下该键以触发事件。

2 个答案:

答案 0 :(得分:2)

避免使用与键盘相关的消息(如WM_KEYDOWN或WM_CHAR)来检测密钥,Windows会在用户按下时重复WM_KEYDOWN。您只需要一个自己的bool标志来跟踪密钥的状态。当您看到GetAsyncKeyState()报告的状态与此标志之间存在差异时,仅更改游戏对象状态。大致是:

bool movingLeft = false;
...
if ((GetAsyncKeyState(VK_LEFT) < 0) != movingLeft) {
    movingLeft = !movingLeft;
    gameObject->setVelocity(movingLeft ? -10 : 0);
}

答案 1 :(得分:1)

使用KeyPress事件(或KeyUp)。

顺便说一句,根据MSDN SHORT WINAPI GetAsyncKeyState(__in int vKey);

  

确定键是向上还是向下   在调用函数时,   以及之后是否按下了按键   之前调用GetAsyncKeyState。

它没有说明检测keydown事件。