iTunes 迷你播放器(仅举一个例子)支持点击,当使用播放/暂停和音量控制时,应用程序不会被带到前面。
这是怎么做到的?
我一直在查看 Apple 的文档,并且在Cocoa Event-Handling Guide 中,Event Dispatch中指出:
一些事件,其中许多是由应用程序工具包(类型 NSAppKitDefined)定义的,与窗口或应用程序对象本身控制的操作有关。这些事件的示例是与激活、停用、隐藏和显示应用程序相关的事件。NSApp 在其调度例程的早期过滤掉这些事件并自行处理它们。
因此,根据我有限的理解(事件如何进入可可,应用程序)子类化 NSApplication 和覆盖
- (void)sendEvent:(NSEvent *)theEvent
应该捕获每个鼠标和键盘事件,但是仍然会在单击时弹出窗口。因此,要么在 NSApplication 看到事件之前引发窗口,要么我错过了其他东西。
我通过重新创建查看了 Matt Gallagher 的 Demystifying NSApplication,不幸的是,Matt 没有涵盖事件队列,所以除此之外,我很难过。
任何帮助将不胜感激,谢谢。
编辑添加:在Lloyd's Lounge找到一个帖子,其中他谈到了同样的问题,并链接到CocoaBuilder 上的帖子,先捕获鼠标右键。我目前正在尝试那里提供的代码,经过一番摆弄并重新激活 [theEvent 类型] 的 NSLog 后,鼠标左键活动被捕获。
现在,左键单击窗口将其向前移动会产生一系列事件类型,13, 1, 13
它们是 NSAppKitDefined、NSLeftMouseDown 和 NSAppKitDefined。我可以过滤掉这些或找到它们的去向吗?