Cocoa:获得全球鼠标位置"当前事件"时间

时间:2015-09-25 22:06:28

标签: macos cocoa

我知道[NSEvent mouseLocation]为我提供了事件流之外的当前鼠标位置。有没有办法让屏幕空间中的鼠标位置,但在当前事件发生时(因此与我从鼠标事件得到的鼠标位置相关)?我只想避免自己跟踪所有窗口的所有鼠标事件并将其存储在全局窗口中。

感谢。

1 个答案:

答案 0 :(得分:3)

如果我理解了你想要的内容,你可以调用[NSApp currentEvent]来获取当前事件,然后在该方法返回的事件上调用[NSEvent locationInWindow]。这将为您提供应用程序正在处理的当前事件的鼠标位置,而不是[NSEvent mouseLocation]提供的当前时刻的鼠标位置。

如果您需要将基于窗口的位置转换为基于屏幕的位置,则可以使用NSEvent方法-window获取事件的窗口,然后使用{{1}将点转换为屏幕坐标。您必须使用基于[window convertRectToScreen:]的API,这有点奇怪;我不明白苹果为什么弃用NSRect,这似乎是一个非常好的API。但是,如果您将窗口位置作为convertBaseToScreen:的原点,使用NSRect的大小为{0,0},然后使用NSMakeRect并将原点提取回原来的获得一个convertRectToScreen:,它似乎很好地转换了这一点。