【问题标题】:How to implement the magnifier glass on color picker of Mac OS?如何在 Mac OS 的拾色器上实现放大镜玻璃?
【发布时间】:2013-03-21 02:37:57
【问题描述】:

是左上角的放大镜:

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

  1. 单击放大镜后,创建一个新光标(带有放大镜图像的光标,或十字路口等)并按下它,然后调用 nextEventMatchingMask:untilDate:inMode:dequeue: of NSApplication 吃完所有的活动直到 我们得到一个NSLeftMouseUp 事件。它确实有效,但并不完美,当点击点超出原始窗口时,其他窗口或应用程序将排在前面。

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

[1] 中的问题:如何在用户单击左键之前禁止所有系统鼠标事件调度?

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

感谢您的回复。

【问题讨论】:

  • 不清楚你想做什么。
  • @bneely,我认为他想要什么很清楚。我猜那个放大镜实际上是一个不透明的 NSWindow 覆盖光标(或光标图像弹出到十字准线)。

标签: objective-c macos cocoa colors picker


【解决方案1】:

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

  1. 应由用户启用辅助功能;
  2. 沙盒下禁止 Quartz 事件服务。

不可能让方法1成功。

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

【讨论】:

    猜你喜欢
    • 2020-12-02
    • 1970-01-01
    • 2011-09-13
    • 2015-02-05
    • 2010-10-06
    • 2017-09-18
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多