如何在Mac OS的颜色选择器上实现放大镜?

时间:2013-03-21 02:37:57

标签: objective-c macos cocoa colors picker

这是左上角的放大镜玻璃:

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

  1. 点击放大镜后,创建一个新光标(带有放大镜玻璃图像的光标,或者交叉场,无论如何)并按下它,然后调用 nextEventMatchingMask:untilDate:inMode:dequeue:的{​​{1}}直到吃完所有事件 我们收到NSApplication个活动。它确实有效但不完美,当点击点离开原始窗口时,其他窗口或应用程序将被排序。

  2. 创建一个NSColorPanel,尝试向面板发送虚假鼠标单击事件。它适用于色轮,但是一旦我将事件位置更改为放大镜玻璃按钮,它就无效。

  3. [1]中的问题:在用户点击左键之前,我怎么能禁止调度所有系统鼠标事件?

    [2]中的问题:这可能吗?

    感谢您的回复。

1 个答案:

答案 0 :(得分:3)

如果我们想要阻止系统事件调度,可以使用Quartz事件服务,但是它有两个问题:

  1. 应由用户启用辅助功能;
  2. 沙箱下禁止使用Quartz事件服务。
  3. 不可能使方法1成功。

    受@CodaFi的启发,我决定使用NSWindow的子类来实现它。在gitbub https://github.com/wentingliu/ScreenPicker创建了一个示例项目,然后查看它。