我正在使用RAWINPUT来处理C ++应用程序中的输入。但是,按下键盘上的一个键并且发送了相应的WM_消息后,键盘消息似乎会暂停半秒钟,然后在后续消息之间没有任何暂停的情况下恢复。
如何更改重复延迟?
以下代码正在使用:
我从我的消息proc转发输入:
case WM_INPUT:
if (!m_inputHandler.HandleInput(msg, wParam, lParam))
return 0;
char buffer[sizeof(RAWINPUT)] = {};
UINT size = sizeof(RAWINPUT);
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, buffer, &size, sizeof(RAWINPUTHEADER));
RAWINPUT *raw = (RAWINPUT*)buffer;
if (raw->header.dwType == RIM_TYPEMOUSE)
{
//
}
else if (raw->header.dwType == RIM_TYPEKEYBOARD)
{
RAWKEYBOARD const &rawKB = raw->data.keyboard;
UINT virtualKey = rawKB.VKey;
UINT scanCode = rawKB.MakeCode;
UINT flags = rawKB.Flags;
// handle keyboard input and dispatch to listeners
}
问题不在于键盘数据的处理,而在于WM_INPUT消息被发送一次,然后暂停,然后在暂停后定期发送。