这是左上方的放大镜:
我尝试了两种方法,但都失败了。
单击放大镜后,创建一个新的光标(带有放大镜图像的光标或十字形光标,无论如何)并将其推入,然后调用nextEventMatchingMask:untilDate:inMode:dequeue:
的NSApplication
吃掉所有事件,直到
我们得到一个NSLeftMouseUp
事件。它确实有效,但并非完美,当点击点不在原始窗口之外时,将在其他窗口或应用程序前面进行排序。
创建一个NSColorPanel,尝试将假鼠标单击事件发送到面板。它可以在色轮上使用,但是一旦将事件位置更改为放大镜玻璃按钮就没有效果。
[1]中的问题:在用户单击左键之前,如何禁止所有系统鼠标事件的调度?
[2]中的问题:这可能吗?
感谢您的任何回复。
最佳答案
如果我们要阻止系统事件的分发,可以使用Quartz事件服务,但是它有两个问题:
可访问性应由用户启用;
沙盒下禁止Quartz事件服务。
方法1不可能成功。
受@CodaFi的启发,我决定使用NSWindow的子类来实现它。在gitbub https://github.com/wentingliu/ScreenPicker创建一个示例项目,然后去检查。
关于objective-c - 如何在Mac OS的拾色器上实现放大镜?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15538484/