在C ++ Windows环境中引用键盘控件时0x80代码的含义是什么?
例如,
if(GetKeyState('K') & 0x80) {
//do something
}
谢谢大家!
答案 0 :(得分:8)
<强>更新强>
一连串的downvotes促使我进一步调查这一点。以下是GetKeyState
的返回值(以十六进制表示)的工作原理。我没有完全获得像k
这样的键的切换属性,但我假设它有一些默认状态从它切换。
0 Default State, key up
ff80 Default state, key down
1 Toggled, key up
ff81 Toggled, key down
每当需要设置高位并且低位有意义时,就会添加0xff80
。所以现在我们知道为什么0x80
方法有效 - 因为低位字节的高位也被设置了!
旧答案
GetKeyState返回SHORT
,如果高位为1
,则表示密钥已启用。使用0x80
的{{3}}操作只会检查该位是1
,因为二进制0x80
中的位是10000000
。
因此,如果GetKeyState('K') & 0x80
返回的值的高位为0x80
,则GetKeyState('K')
语句将返回1
,如果高0
则为0
订单位为{{1}}。
答案 1 :(得分:3)
MSDN documentation of the function州:
如果高位为1,则键为 下;否则,它就结束了。
按位,0x80给出高位,if
检查结果是零还是非零,实质上是检查该位的值。
然而,此检查看起来像是一个错误,因为GetKeyState()
返回SHORT
并检查需要按位的短序的高位和0x8000。
因此,我建议您使用调试器检查返回值,并验证其实际工作原理。
答案 2 :(得分:2)
我认为你的意思是0x8000,而不是0x80。如果是这种情况,您应该查阅文档(http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx),其中包含以下关于GetKeyState的返回值的说明: -
返回值指定指定虚拟键的状态,如下所示:
•如果高位为1,则键为关闭;否则,它就结束了。 •如果低位为1,则切换键。如果键打开,则会切换一个键,例如CAPS LOCK键。如果低位为0,则键关闭并取消加盖。当键切换时,键盘上的切换键指示灯(如果有)将打开,而当键未被切换时,键将关闭。
0x80并不意味着什么,尽管
答案 3 :(得分:1)
返回值指定指定虚拟键的状态:
如果高位为1,则键为关闭;否则,它就结束了 如果低位为1,则切换键。如果键被打开,则会切换一个键,例如CAPS LOCK键。如果低位为0,则键关闭并取消加盖。当键切换时,键盘上的切换键指示灯(如果有)将打开,而当键未被切换时,键将关闭。
也许使用不可切换的键(例如'K'),低阶(模糊术语 - 也许它们意味着0x0080?)和高阶(0x8000)位执行相同操作事?