【问题标题】:When tapping Quartz events, what is CGEventType 0x1D (29)?点击 Quartz 事件时,CGEventType 0x1D (29) 是什么?
【发布时间】:2017-07-03 18:58:32
【问题描述】:

在处理 Quartz 事件时,我似乎找不到任何关于事件 0x1D, 29 是什么以及如何处理它的文档。

我在这里查看了各种头文件... https://developer.apple.com/documentation/coregraphics/cgeventtype?language=objc

使用触控栏和触控板时会产生相关事件。

我的具体问题是点击像逃逸这样的陷阱触摸栏软键。当用户触摸 escape 时,会触发 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 中有哪些可用信息。

【问题讨论】:

    标签: objective-c macos cocoa quartz-core


    【解决方案1】:

    有时这样的事情会“隐藏”在头文件中。如果您查看 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 是一个“手势”事件。

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多