【问题标题】:How to set the cursor in a custom NSView?如何在自定义 NSView 中设置光标?
【发布时间】:2011-03-01 17:34:08
【问题描述】:

我有一个自定义视图,需要根据鼠标的位置设置光标。我使用[NSCursor set] 将光标设置在mouseMoved: 处理程序中。这适用于 OS X 10.5,但大多数时候不适用于 10.6。有时光标会改变,但通常不会。

问题是我必须设置光标以响应mouseMoved: 事件,我无法注册光标矩形或使用NSTrackingAreaupdateCursor: 事件。我正在为 NetSurf 浏览器开发 Cocoa 前端。引擎期望来自前端的鼠标移动事件。如果光标位于链接或需要不同光标的东西上,引擎会从前端调用一个函数来设置新光标。

关于如何在 Snow Leopard 上进行这项工作的任何想法?

【问题讨论】:

  • 您是否看到任何光标闪烁?它看起来像光标正在短暂改变吗?您能否开发一个示例应用程序来演示该问题? (我可以在 10.6 上成功使用 [NSCursor set]) 还有其他可以调用来更改光标的函数(例如已弃用的 SetCursor),是否正在使用它们中的任何一个?我可能会建议观看对 [NSCursor set] 的所有调用 - 请参阅 developer.apple.com/library/mac/#technotes/tn2004/tn2124.html
  • 您当前的代码如何(在位置上)知道何时以及更改为哪个光标?

标签: objective-c cocoa macos nsview nscursor


【解决方案1】:

通常,您应该使用 CursorRects 来避免其他视图更改您的光标。但是由于您不能这样做,您可以通过在鼠标进入您的视图时在窗口级别禁用 CursorRects 来防止它们的干扰。在鼠标退出视图时,为窗口启用返回光标。

【讨论】:

    【解决方案2】:

    只需在 mouseEnter 和 mouseExit 中使用 NSCursor 对象进行推送和弹出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多