2017-07-03 50 views
2

在处理Quartz事件时,我似乎无法找到关于什么事件0x1D,29的文档以及如何处理它。当点击Quartz事件时,什么是CGEventType 0x1D(29)?

我在这里,并在头文件的分类看... https://developer.apple.com/documentation/coregraphics/cgeventtype?language=objc

有问题的情况下使用触摸条和触控板时产生。

我的具体问题是点击捕捉触摸栏像转义软键。当用户触摸转义时,会触发0x1D事件。如果此事件未从事件回调中返回,那么kCGEventKeyDown和kCGEventKeyUp事件永远不会被触发。如果返回此事件,则随后的事件将像传统键盘上的按钮一样触发。

eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL); 

//No touch bar soft key events will ever fire 
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) { 
    if(type == 0x1D) { 
      return NULL; 
    } 
} 

显然,我可以总是一味返回此类型的事件,但我更愿意理解这一事件代表什么信息可里面的CGEventRef。

回答

4

有时像这样的东西是“隐藏”在头文件。如果你看一看NSEvent.h(CGEventTypeNSEventType映射到相同的值),你会发现你的价值:

// snip... 
/* The following event types are available on some hardware on 10.5.2 and later */ 
NSEventTypeGesture NS_ENUM_AVAILABLE_MAC(10_5)  = 29, 
NSEventTypeMagnify NS_ENUM_AVAILABLE_MAC(10_5)  = 30, 
NSEventTypeSwipe NS_ENUM_AVAILABLE_MAC(10_5)  = 31, 
// snip... 

所以29是一种“姿态”事件。

+0

非常感谢! –

相关问题