1

我想知道是否可以将鼠标光标准确地限制在一条线上。一般的想法是我想创建一个标尺/法式曲线应用程序,我可以在其中拖出一条线并使用贝塞尔点使其弯曲,然后按住热键将鼠标限制在它上面以便我可以绘画带有 wacom 数位板的 Photoshop 中的类似线。

到目前为止,我尝试过的是以下内容。我现在只是用对角线测试它。虽然它似乎正确地将我的鼠标限制在这条线上,但当我在 photoshop 中画一条线时,看起来有一些鼠标事件在事件之间被调度,这些事件将我的光标“捕捉”到我的对角线。例如,如果我将鼠标快速向上和向右移动,鼠标将向上和向右移动一个事件循环,然后快速回到我的对角线。这显然不适用于绘画目的。是否有一些较低级别的鼠标界面可以用来拦截所有鼠标事件,并可能阻止它们在发送到其他应用程序之前被分派。

[NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent * mouseEvent) {
    [self mouseMoved:mouseEvent];
}];
[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent * mouseEvent) {
    [self mouseMoved:mouseEvent];
}];


- (void)mouseMoved:(NSEvent *)evt {
    NSLog(@"Mouse moved: %@", NSStringFromPoint([evt locationInWindow]));

    NSPoint mousePos = [evt locationInWindow];

    CGSetLocalEventsSuppressionInterval(0.0f);
    CGWarpMouseCursorPosition(CGPointMake(mousePos.x, mousePos.x));
}
4

1 回答 1

0

您正在寻找CGEventTap API

于 2013-02-12T03:18:20.313 回答