0

有谁知道如何通过 GetKeys 函数获取任何键状态(按下或否)?换句话说,如何处理这个函数:

bool result = isPressed(kVK_LeftArrow);

谢谢你。

4

1 回答 1

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
}
于 2012-07-17T02:21:30.143 回答