【问题标题】:How to get cursor position relative to window in Mac OS X?如何在 Mac OS X 中获取光标相对于窗口的位置?
【发布时间】:2011-11-19 19:23:14
【问题描述】:

我可以使用[NSEvent mouseLocation] 来获取光标的位置,但这会给我屏幕坐标。当光标在视图中时,如何获取光标相对于视图的坐标?我搜索了 Apple 文档,但找不到答案。

如果有所作为,我将希望不断检索鼠标位置,因为它将在每次帧更新中使用。

【问题讨论】:

    标签: objective-c macos cocoa cursor-position


    【解决方案1】:

    为了完整起见,有一种直接的方法可以在窗口坐标中获取鼠标位置(使用 NSWindow)。根据您的窗口布局,这可能等同于视图的坐标。

    NSWindow *myWindow;
    NSPoint mousePos;
    ...
    mousePos = [myWindow mouseLocationOutsideOfEventStream];
    

    返回的坐标是窗口坐标,所以如果鼠标在窗口的左侧/下方,则返回一个负值。如果鼠标在窗口的右侧/上方,则坐标将超过窗口的大小。

    【讨论】:

      【解决方案2】:
      NSPoint myPoint = 
          [myView convertPoint:[myWindow convertScreenToBase:[NSEvent mouseLocation]]
                      fromView:nil];
      

      【讨论】:

      • convertScreenToBase 已弃用
      【解决方案3】:
      - (void)mouseMoved:(NSEvent *)event
      {
          NSPoint locationInView = [self convertPoint:[event locationInWindow]
                                             fromView:nil];
      }
      

      还要确保您已启用 mouseMoved 事件:

      [window setAcceptsMouseMovedEvents:YES];
      

      【讨论】:

      • theEvent 应该是event,我想。
      猜你喜欢
      • 1970-01-01
      • 2020-06-24
      • 2011-05-01
      • 1970-01-01
      • 2013-01-20
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多