有没有办法确定在onMouseDrag事件中被拖动的内容?具体来说,我想知道是否正在拖动一个窗口。
我尝试过以下方法: 辅助功能API:存储活动窗口的初始位置,在拖动期间再次查询窗口位置并比较值。此方法的问题是Accessibility API在鼠标停止移动之前不会更新窗口的位置(主鼠标按钮仍处于按下状态)。当鼠标在短暂停止后再次拖动时,它会给出更新的位置。
将NSWindowDelegate附加到活动窗口:我对此很新,所以我不知道找到焦点/活动窗口的NSWindow的方法。
提前致谢!
更新: 我使用Accessibility API获取活动窗口并附加AXObserverRef以获取kAXMovedNotification。我使用CFRunLoopAddSource将此观察者添加到运行循环中。结果是,只有当我停止拖动窗口时,对通知的回调才会排队并触发对它的多次调用。是否有一种方法可以立即触发回调,而不会像这样排队,这样我就可以在拖动窗口时运行一些代码,而不是在拖动时停止?
答案 0 :(得分:0)
移动时窗口的状态不会更新,但您可以知道它何时开始被拖动以及何时停止拖动。
如果您设置一个符合NSWindowDelegate协议的窗口的委托,您将能够在使用windowWillMove拖动窗口时收到通知:并且当您停止使用windowDidMove拖动或释放鼠标按钮时也会收到通知:./ / p >
如果您想知道拖动哪个窗口,两个方法都会收到名为notification的NSNotification对象,您可以使用[notification object]或notification.object检索窗口。