gpt4 book ai didi

c++ - WM_KEYDOWN,从 lparam 获取值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:38 28 4
gpt4 key购买 nike

在 MSDN 上,对于 WM_KEYDOWN 定义,它表示 lparam 的位包含:

Bits    Meaning
0-15 The repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23 The scan code. The value depends on the OEM.
24 Indicates whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28 Reserved; do not use.
29 The context code. The value is always 0 for a WM_KEYDOWN message.
30 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.
31 The transition state. The value is always 0 for a WM_KEYDOWN message.

( http://msdn.microsoft.com/en-us/library/ms646280%28VS.85%29.aspx )

所以我创建了一个内部结构的 union 体,如下所示:

union KeyState
{
LPARAM lparam;

struct
{
unsigned nRepeatCount : 15;
unsigned nScanCode : 8;
unsigned nExtended : 1;
unsigned nReserved : 4;
unsigned nContext : 1;
unsigned nPrev : 1;
unsigned nTrans : 1;
};
};

然后当我在我的编辑框中收到一条 wm_keydown 消息时,我会像这样打印它:

if (msg == WM_KEYDOWN)
{
std::tstringstream ss;

KeyState ks;
ks.lparam = lparam;

ss << "Key: " << (TCHAR)wparam << ", Val: " << (UINT)wparam << ", nRepeatCount: " << ks.nRepeatCount <<
", nScanCode: " << ks.nScanCode << ", nExtended: " << ks.nExtended << ", nReserved: " << ks.nReserved <<
", nContext: " << ks.nContext << ", nPrev: " << ks.nPrev << ", nTrans: " << ks.nTrans;

SetWindowText(hOut, ss.str().c_str());
}

当我在编辑框中输入时返回的值似乎不正确,有时 nReserved 甚至为 1 或 0,并且 nRepeatCount 始终为 1,无论我是否按住该键登录时间或者只是按随机键。

我做错了什么吗?如果是这样,从 LPARAM 获取这些值的理想方法是什么?

最佳答案

一方面,0-15 是 16 位,而不是 15。

关于c++ - WM_KEYDOWN,从 lparam 获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4127041/

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