如何在 Mac OS X 中获取光标相对于窗口的位置?

Posted

技术标签:

【中文标题】如何在 Mac OS X 中获取光标相对于窗口的位置?【英文标题】:How to get cursor position relative to window in Mac OS X? 【发布时间】:2011-11-19 19:23:14 【问题描述】:

我可以使用[NSEvent mouseLocation] 来获取光标的位置,但这会给我屏幕坐标。当光标在视图中时,如何获取光标相对于视图的坐标?我搜索了 Apple 文档,但找不到答案。

如果有所作为,我将希望不断检索鼠标位置,因为它将在每次帧更新中使用。

【问题讨论】:

【参考方案1】:

为了完整起见,有一种直接的方法可以在窗口坐标中获取鼠标位置(使用 NSWindow)。根据您的窗口布局,这可能等同于视图的坐标。

NSWindow *myWindow;
NSPoint mousePos;
...
mousePos = [myWindow mouseLocationOutsideOfEventStream];

返回的坐标是窗口坐标,所以如果鼠标在窗口的左侧/下方,则返回一个负值。如果鼠标在窗口的右侧/上方,则坐标将超过窗口的大小。

【讨论】:

【参考方案2】:
NSPoint myPoint = 
    [myView convertPoint:[myWindow convertScreenToBase:[NSEvent mouseLocation]]
                fromView:nil];

【讨论】:

convertScreenToBase 已弃用【参考方案3】:
- (void)mouseMoved:(NSEvent *)event

    NSPoint locationInView = [self convertPoint:[event locationInWindow]
                                       fromView:nil];

还要确保您已启用 mouseMoved 事件:

[window setAcceptsMouseMovedEvents:YES];

【讨论】:

theEvent 应该是event,我想。

以上是关于如何在 Mac OS X 中获取光标相对于窗口的位置?的主要内容,如果未能解决你的问题,请参考以下文章

获取 SharpDX 中相对于窗口的鼠标位置

如何制作一个类似于 Mac OS X 坞站堆栈的窗口?

我们如何获得相对于窗口形式的位置?

如何在 MAC OS X 中获得最大 TCP 接收/发送窗口?

Tkinter 窗口专注于 Mac OS X

Mac OS X 终端中的 Vim:逐字移动光标