有没有人知道如何通过GetKeys函数获取任何键状态(按下或否)? 换句话说,如何处理这个功能:
bool result = isPressed(kVK_LeftArrow);
三江源。
答案 0 :(得分:4)
KeyMap
类型是一个整数数组,但它的实际布局是一系列位,每个键代码一个。特定密钥的位数小于虚拟密钥代码。
由于位移对于非常大的值是不合法的(例如,您不能要求编译器移位74位),KeyMap
类型分为4个部分。您需要将虚拟键代码的位数和整数除以32,以找到该位的正确整数;然后取余数来确定应该设置哪个位。
所以,试试这个:
uint16_t vKey = kVK_LeftArrow;
uint8_t index = (vKey - 1) / 32;
uint8_t shift = ((vKey - 1) % 32);
KeyMap keyStates;
GetKeys(keyStates);
if (keyStates[index] & (1 << shift))
{
// left arrow key is down
}