the*_*kid 3 macos events core-graphics
设置事件点击后,我无法确定在给定CGEvent的情况下按下了哪个修改键.
CGEventFlags flagsP;
flagsP=CGEventGetFlags(event);
NSLog(@"flags: 0x%llX",flagsP);
NSLog(@"stored: 0x%llX",kCGEventFlagMaskCommand);
if (flagsP==kCGEventFlagMaskCommand) {
NSLog(@"command pressed");
}
Run Code Online (Sandbox Code Playgroud)
给定上面的代码片段,第一个NSLog返回与第二个NSLog不同的值.毫不奇怪,当按下命令修饰键时,从不触发条件.
我需要确定是否按下给定CGEvent的命令,备用,选项,控制或移位.首先,我需要帮助才能理解上述原因无效.
谢谢!
这些是位掩码,它们将按位或逐位进入您收到的值CGEventGetFlags(或在自己创建事件时传递).
您不能在此测试相等性,因为没有单个位掩码将等于多个位掩码的组合.您需要测试单个位的相等性.
要从组合位掩码中提取单个位掩码的值,请使用按位AND(&)运算符.然后,将其与您感兴趣的单位掩码进行比较:
BOOL commandKeyIsPressed = (flagsP & kCGEventFlagMaskCommand) == kCGEventFlagMaskCommand;
Run Code Online (Sandbox Code Playgroud)
两个为什么?
该&表达式评估为相同类型的操作数,这是CGEventFlags在这种情况下,这可能不适合于的大小BOOL,这是一个signed char.所述==表达可以消除该为1或0,这是所有,将适合在一个BOOL.
该问题的其他解决方案包括否定值两次(!!)并将变量声明为bool或者_Bool而不是Boolean或BOOL.C99的_Bool类型(异名来bool当你包括stdbool.h)强制其值为1或0,就像==和!!解决方案做.
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |