引用 C++ Windows 环境中的键盘控件时,0x80 代码是什么意思?
例如,
if(GetKeyState('K') & 0x80) {
//do something
}
感谢大家!
更新
一连串的反对票促使我进一步调查此事。以下是返回值(十六进制)的GetKeyState
工作原理。我不太了解像这样的键的切换属性,k
但我假设它有一些默认状态可以切换。
0 Default State, key up
ff80 Default state, key down
1 Toggled, key up
ff81 Toggled, key down
0xff80
每当需要设置高位并且低位有意义时,都会添加So。所以现在我们知道了为什么这种0x80
方法有效——因为低字节的高位也被设置了!
旧答案
GetKeyState返回一个SHORT
where 如果高位是1
则表示密钥已启动。仅检查该位是否为的按位与运算,因为在二进制中是。0x80
1
0x80
10000000
因此,如果返回值的高位为 is且高位为 ,则该语句GetKeyState('K') & 0x80
将返回。0x80
GetKeyState('K')
1
0
0
该函数的 MSDN 文档指出:
如果高位为1,则key为down;否则,它就起来了。
按位和 0x80 为您提供高位,if
检查结果是零还是非零,本质上检查该位的值。
然而,这个检查看起来像一个错误,因为GetKeyState()
返回 aSHORT
并且要检查短路的高位,您需要按位和 0x8000。
所以我建议你用调试器检查返回值,并验证它在现实中是如何工作的。
我认为您的意思是 0x8000,而不是 0x80。如果是这种情况,您应该查阅文档 ( http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx ),该文档对 GetKeyState 的返回值有以下说明: -
返回值指定指定虚拟键的状态,如下:
•如果高位为1,则key为down;否则,它就起来了。•如果低位为1,则键被切换。一个键,如 CAPS LOCK 键,如果打开,它会被切换。如果低位为 0,则该键关闭且未切换。切换键时键盘上的切换键指示灯(如果有)将亮起,当键未切换时将熄灭。
据我所知,0x80 没有任何意义
根据文档
返回值指定指定虚拟键的状态:
如果高位为1,则键为down;否则,它就起来了。
如果低位为 1,则键被切换。一个键,如 CAPS LOCK 键,如果打开,它会被切换。如果低位为 0,则该键处于关闭状态且未切换。切换键时键盘上的切换键指示灯(如果有)将亮起,当键未切换时将熄灭。
也许使用不可切换的键(例如“K”),低位(模棱两可的术语 - 也许它们的意思是 0x0080 ?)和高位(0x8000)位做同样的事情?