[英]How to get current type of mouse cursor in Mac OS X?
如何在屏幕上显示当前类型的鼠标光标? (不仅在我的应用程序窗口,全局。)或者至少可以检测当前是否显示默认光标? 无论是Carbon还是Cocoa都可以 - 甚至是其他工作API,最好是官方API。
这是我尝试过的:
NSCursor *sysCursor = [NSCursor currentSystemCursor];
if (sysCursor == nil) {
NSLog(@"nil");
}
if ([sysCursor isEqual: [NSCursor arrowCursor]] ||
[sysCursor isEqual: [NSCursor contextualMenuCursor]] ||
[sysCursor isEqual: [NSCursor closedHandCursor]] ||
[sysCursor isEqual: [NSCursor crosshairCursor]] ||
[sysCursor isEqual: [NSCursor disappearingItemCursor]] ||
[sysCursor isEqual: [NSCursor dragCopyCursor]] ||
[sysCursor isEqual: [NSCursor dragLinkCursor]] ||
[sysCursor isEqual: [NSCursor IBeamCursor]] ||
[sysCursor isEqual: [NSCursor openHandCursor]] ||
[sysCursor isEqual: [NSCursor operationNotAllowedCursor]] ||
[sysCursor isEqual: [NSCursor pointingHandCursor]] ||
[sysCursor isEqual: [NSCursor resizeDownCursor]] ||
[sysCursor isEqual: [NSCursor resizeLeftCursor]] ||
[sysCursor isEqual: [NSCursor resizeLeftRightCursor]] ||
[sysCursor isEqual: [NSCursor resizeRightCursor]] ||
[sysCursor isEqual: [NSCursor resizeUpCursor]] ||
[sysCursor isEqual: [NSCursor resizeUpDownCursor]] ||
[sysCursor isEqual: [NSCursor IBeamCursorForVerticalLayout]]
) {
NSLog(@"equal");
} else {
NSLog(@"not");
}
光标不是nil
,但同时它不等于任何其他光标。 它甚至不等于它自己:
NSLog(@"%i", [[NSCursor currentSystemCursor]
isEqual:[NSCursor currentSystemCursor]]); // 0
想法? 这是一个LSUIElement
类型的应用程序,如果这很重要。
您可以使用类似于以下代码的代码检查当前设置的光标类型:
if ([[NSCursor currentSystemCursor] isEqual: [NSCursor pointingHandCursor]]) {
// …
}
在检索游标实例中列出了您可以使用的其他值,而不是[NSCursor pointingHandCursor]
。
这是一个非常黑客,但看起来可以使用hotSpot
属性分辨至少一些游标:
NSLog(@"%@", NSStringFromPoint([[NSCursor currentSystemCursor] hotSpot]));
这将返回{5, 5}
作为默认指针光标。 在某些情况下(比如更高的DPI或其他任何情况),我不知道这个值是否会更改为默认光标。 我在NSCursor
上结束了这个类别:
- (BOOL) isDefaultCursor
{
NSPoint defaultCursorHotspot = [[NSCursor arrowCursor] hotSpot];
return NSEqualPoints(defaultCursorHotspot, [self hotSpot]);
}
除此之外,还有一个_flags.cursorType
实例变量,但它受到保护。 而且,正如您已经提到的那样,当前的系统游标不一定是-isEqual:
自身。
您可以比较光标图像。 isEqual不适用于此,您必须获取位图图像数据并进行比较。
你应该使用currentCursor而不是currentSystemCursor ,所以你的sysCursor声明应该是这样的:
NSCursor *sysCursor = [NSCursor currentCursor];
此外,您应该在用户单击后检查光标的类型,而不是,例如在applicationDidFinishLaunching或类似的情况下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.