【发布时间】:2012-07-13 07:49:42
【问题描述】:
有谁知道如何通过 GetKeys 函数获取任何键状态(按下或否)? 换句话说如何处理这个函数:
bool result = isPressed(kVK_LeftArrow);
谢谢。
【问题讨论】:
标签: macos cocoa macos-carbon core-foundation
有谁知道如何通过 GetKeys 函数获取任何键状态(按下或否)? 换句话说如何处理这个函数:
bool result = isPressed(kVK_LeftArrow);
谢谢。
【问题讨论】:
标签: macos cocoa macos-carbon core-foundation
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
}
【讨论】:
kVK_ANSI_W 等(顺便说一下,它们不是按ASCII 顺序排列的),您不需要需要从vKey 中取-1(这将是错误的)。