如何在Quartz事件中读取鼠标增量?

问题描述 投票:0回答:1

在Quartz应用程序中,我试图冻结屏幕上的鼠标pointer,但继续从用户注册鼠标mouvements。我发现了如何冻结指针的方法:

CGAssociateMouseAndMouseCursorPosition(false);

我正在跟踪documentation,但不知道如何获取和读取包含鼠标变化量(X和Y的变化)数据的事件

macos core-graphics quartz
1个回答
0
投票

我找到了解决方案。我现在得到这样的鼠标移动:

CGEventMask eventMask = CGEventMaskBit(kCGEventMouseMoved);
CFMachPortRef tap = CGEventTapCreate(   kCGAnnotatedSessionEventTap, 
                                        kCGHeadInsertEventTap, 
                                        kCGEventTapOptionListenOnly, 
                                        eventMask, 
                                        eventOccurred, 
                                        NULL);
CFRunLoopSourceRef rl = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, tap, 0);
CFRunLoopAddSource(CFRunLoopGetMain(), rl, kCFRunLoopCommonModes);
CGEventTapEnable(tap, true);

其中回调是:

CGEventRef eventOccurred(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void* refcon) {
    if (type == kCGEventMouseMoved) {
        d_x =  CGEventGetIntegerValueField(event, kCGMouseEventDeltaX);
        d_y =  CGEventGetIntegerValueField(event, kCGMouseEventDeltaY);
    }
    return event;
}

注意:d_xd_y是全局定义的int,用于存储每个事件之间的鼠标移动。

© www.soinside.com 2019 - 2024. All rights reserved.