我已经创建了一个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成为关键窗口时,这将使十字准线显示出来。但是如果我让应用程序中的另一个NSWindow成为关键窗口,则光标会再次返回标准光标。我做错了什么吗?