在非活动NSWindow上更改鼠标光标

www.jensolsson.se

我已经继承了NSWindow,并拥有一个实现以下方法的MYWindow类:

-(void)resetCursorRects {
    NSImage *image = [NSImage imageNamed:@"cursor.png"];
    [image setSize:NSMakeSize(32, 32)];
    NSCursor *cursor = [[NSCursor alloc] initWithImage:image hotSpot:NSMakePoint(1, 1)];
    [super resetCursorRects];    
    [self addCursorRect:[self bounds] cursor:cursor];
}

这将更改整个窗口的光标,我将看到cursor.png而不是默认的鼠标指针。问题是,这仅在MYWindow设置为键窗口时才起作用,而键窗口当然并不重要。

在我的项目开始时,我只有一个主窗口,但是现在我需要有两个不同的MYWindow。两个窗口的问题不能同时设置为键窗口,因此自定义鼠标指针仅显示在活动窗口上。我需要单击另一个窗口以使光标出现。

有没有办法解决?所以我在两个窗口上都有一个自定义光标吗?

编辑:尝试了NSTrackingArea

我将此添加到了内容视图的init方法中:

self.trackingArea = [[NSTrackingArea alloc] initWithRect:[self frame] options: (NSTrackingCursorUpdate | NSTrackingActiveAlways | NSTrackingMouseMoved) owner:self userInfo:nil];
[self addTrackingArea:self.trackingArea];

然后,我覆盖了cursorUpdate:

-(void)cursorUpdate:(NSEvent *)event {
    NSLog(@"event : %@", event);
    [[NSCursor crosshairCursor] set];
}

当包含NSImageView派生类的NSWindow是关键窗口时,这将使crosshairCursor显示。但是,如果我在应用程序内使另一个NSWindow成为键窗口,则光标会再次返回到标准光标。难道我做错了什么?

www.jensolsson.se

现在,我终于找到了可行的解决方案。我不知道这将来是否会咬我,但至少在测试时似乎可行。

感谢Wil的例子,它使我半途而废。但是只有当我最终将它与resetCursorRects结合在一起,并在每个视图中使用特定的游标定义了一个游标rect时,才可以。这花了我很长时间才弄清楚,我不知道解决方案是否是最佳的(欢迎提出改进建议)

下面是使它最终对我有用的完整示例(self.cursor是光标的一个实例)

- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
    NSTrackingArea *const trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways | NSTrackingInVisibleRect) owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];
    [self.window invalidateCursorRectsForView:self];
}

- (void)resetCursorRects {
    [super resetCursorRects];
    [self addCursorRect:self.bounds cursor:self.cursor];
}

- (void)mouseEntered:(NSEvent *)theEvent {
    [super mouseEntered:theEvent];
    [self.cursor push];
}

- (void)mouseExited:(NSEvent *)theEvent {
    [super mouseExited:theEvent];
    [self.cursor pop];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更改OSX Mavericks上的默认鼠标光标

来自分类Dev

如何在嵌入式Flash上更改鼠标光标?

来自分类Dev

如何在按钮上更改鼠标光标?

来自分类Dev

如何在按钮上更改鼠标光标?

来自分类Dev

更改按钮上的鼠标光标-垂直于指针

来自分类Dev

禁用鼠标光标不活动隐藏

来自分类Dev

更新鼠标光标,而不用更改CSS光标属性移动鼠标

来自分类Dev

将鼠标悬停在Raphael元素上时更改光标

来自分类Dev

如何在具有上下文菜单事件处理程序的组件上更改鼠标光标?

来自分类Dev

将鼠标光标更改为WPF中禁用按钮上悬停时的“停止”指针

来自分类Dev

如果将鼠标悬停在小部件的特定区域上,则更改光标

来自分类Dev

将鼠标悬停在Google图表上时更改光标样式

来自分类Dev

XAML按钮模板在鼠标光标悬停于其上时发生更改

来自分类Dev

如何在登录屏幕上更改鼠标光标和灵敏度/加速度?

来自分类Dev

将鼠标悬停在分隔符上时,是否可以在NSSplitView中暂时禁用鼠标光标更改?

来自分类Dev

保存Ember内容时更改鼠标光标

来自分类Dev

WPF-如何更改鼠标光标颜色

来自分类Dev

如何在控件内更改鼠标光标?

来自分类Dev

如何更改鼠标光标的线宽?

来自分类Dev

HWND鼠标悬停时更改光标

来自分类Dev

WPF-如何更改鼠标光标颜色

来自分类Dev

如何在控件内更改鼠标光标?

来自分类Dev

在屏幕上重新定位鼠标光标

来自分类Dev

pygame检测鼠标光标在对象上

来自分类Dev

根据点击位置放弃NSWindow上的鼠标事件

来自分类Dev

使鼠标滚动在非活动窗口中工作?

来自分类Dev

将鼠标悬停在表格中的文本上时,如何停止将光标更改为I栏?

来自分类Dev

将鼠标悬停在带有Javascript的Google Chart API上时如何更改光标样式

来自分类Dev

将鼠标悬停在带有Javascript的Google Chart API上时如何更改光标样式

Related 相关文章

  1. 1

    更改OSX Mavericks上的默认鼠标光标

  2. 2

    如何在嵌入式Flash上更改鼠标光标?

  3. 3

    如何在按钮上更改鼠标光标?

  4. 4

    如何在按钮上更改鼠标光标?

  5. 5

    更改按钮上的鼠标光标-垂直于指针

  6. 6

    禁用鼠标光标不活动隐藏

  7. 7

    更新鼠标光标,而不用更改CSS光标属性移动鼠标

  8. 8

    将鼠标悬停在Raphael元素上时更改光标

  9. 9

    如何在具有上下文菜单事件处理程序的组件上更改鼠标光标?

  10. 10

    将鼠标光标更改为WPF中禁用按钮上悬停时的“停止”指针

  11. 11

    如果将鼠标悬停在小部件的特定区域上,则更改光标

  12. 12

    将鼠标悬停在Google图表上时更改光标样式

  13. 13

    XAML按钮模板在鼠标光标悬停于其上时发生更改

  14. 14

    如何在登录屏幕上更改鼠标光标和灵敏度/加速度?

  15. 15

    将鼠标悬停在分隔符上时,是否可以在NSSplitView中暂时禁用鼠标光标更改?

  16. 16

    保存Ember内容时更改鼠标光标

  17. 17

    WPF-如何更改鼠标光标颜色

  18. 18

    如何在控件内更改鼠标光标?

  19. 19

    如何更改鼠标光标的线宽?

  20. 20

    HWND鼠标悬停时更改光标

  21. 21

    WPF-如何更改鼠标光标颜色

  22. 22

    如何在控件内更改鼠标光标?

  23. 23

    在屏幕上重新定位鼠标光标

  24. 24

    pygame检测鼠标光标在对象上

  25. 25

    根据点击位置放弃NSWindow上的鼠标事件

  26. 26

    使鼠标滚动在非活动窗口中工作?

  27. 27

    将鼠标悬停在表格中的文本上时,如何停止将光标更改为I栏?

  28. 28

    将鼠标悬停在带有Javascript的Google Chart API上时如何更改光标样式

  29. 29

    将鼠标悬停在带有Javascript的Google Chart API上时如何更改光标样式

热门标签

归档