0

有没有办法确定在 onMouseDrag 事件期间拖动了什么?具体来说,我想知道是否正在拖动窗口。

我尝试了以下方法: Accessibility API:存储活动窗口的初始位置,在拖动和比较值期间再次查询窗口位置。这种方法的问题是 Accessibility API 不会更新窗口的位置,直到鼠标停止移动(仍然按下主鼠标按钮)。当鼠标在短暂停止后再次开始拖动时,它会提供更新的位置。

将 NSWindowDelegate 附加到活动窗口:我对此很陌生,所以我不知道找到焦点/活动窗口的 NSWindow 的方法。

提前致谢!

更新:我使用 Accessibility API 获取活动窗口并附加 AXObserverRef 以获取 kAXMovedNotification。我使用 CFRunLoopAddSource 将此观察者添加到运行循环中。结果是通知的回调排队并仅在我停止拖动窗口时触发多次调用。有没有办法让回调立即触发而不像这样排队,这样我就可以在拖动窗口时运行一些代码,而不是在拖动停止时运行一些代码?

4

1 回答 1

0

窗口的状态在您移动时不会更新,但您可以知道它何时开始被拖动以及何时停止被拖动。

如果您为您的窗口设置了一个符合 NSWindowDelegate 协议的委托,您将能够在使用 windowWillMove: 拖动窗口时收到通知,并在您使用 windowDidMove: 停止拖动或释放鼠标按钮时收到通知。

如果你想知道哪个窗口被拖动,这两种方法都会收到一个名为 notification 的 NSNotification 对象,你可以使用 [notification object] 或 notification.object 检索窗口。

于 2013-01-29T11:20:07.183 回答