这是左上方的放大镜:



我尝试了两种方法,但都失败了。


单击放大镜后,创建一个新的光标(带有放大镜图像的光标或十字形光标,无论如何)并将其推入,然后调用
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/

10-10 11:50