gpt4 book ai didi

C++ WM_KEYDOWN 不同的间隔

转载 作者:行者123 更新时间:2023-11-28 07:30:14 26 4
gpt4 key购买 nike

我目前正在尝试从我自己的 InputBox 的 WM_KEYDOWNWM_CHAR 消息中获取键盘输入。

这是我用于基本输入的代码,它适用于字符:​​

if(msg.message == WM_KEYDOWN)
{
keyHandled = false;
//handle other keys here, e.g. VK_LEFT
}
else if(msg.message == WM_CHAR && !keyHandled)
{
keyHandled = true;
gui->UpdateInput(msg.wParam);
}

如果按下的键也是触发WM_CHAR消息的键,则间隔与通常的输入框相同。
但是,如果它是像 VK_LEFT 这样的键,它会继续接收 WM_KEYDOWN 消息,不会有任何延迟。

有什么方法可以让我以相同的时间间隔接收所有 key ,或者我是否必须实现一个计时器来处理消息之间的延迟?我也看过 WM_KEYDOWN message在 msdn 上,但我找不到与间隔相关的任何内容。

最佳答案

Windows 在从键盘输入发送键盘事件时有其自身的延迟,这不是您可以简单更改的。如您所知,按住一个键会产生第一条消息、延迟,然后是间隔更快的一系列更多消息。您可以通过请求状态而不是直接依赖消息来解决这个问题。这称为无缓冲 输入并且是面向状态 的。要存储您的状态,您可以执行以下操作:

bool keys[256];

当您检查 Windows 事件时,您可以像这样相应地更新键状态:

//In your WinProc function most likely
if (msg.message == WM_KEYDOWN)
{
keys[msg.wParam] = true;
}

if (msg.message == WM_KEYUP)
{
keys[msg.wParam] = false;
}

然后,只要您愿意,就可以通过以下函数请求特定键的状态:

bool getKeyPressed(char keycode)
{
return keys[keycode];
}

例如:

//This could be in some random update function and called
//whenever you need the information.
if (getKeyPressed(VK_UP))
{
//Do something here...
}

上述功能可以在任何您喜欢的地方使用,因此您更新的频率完全取决于您。如前所述,这是无缓冲输入并且是状态导向的,而缓冲输入是事件导向的。 p>

关于C++ WM_KEYDOWN 不同的间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17881369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com