2017-07-03 45 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

非常感謝! –

相關問題