微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

objective-c – “非激活”中的NSPanel -Mode不总是显示正确的游标

我在XCode 4.6中创建了一个简单的可可应用程序,使用NSPanel而不是认的NSWindow.启用非激活时
选项并启动应用程序一切正常:

面板显示在其他任何事物的前面
鼠标光标悬停在面板的边缘,它从正常变化
箭头光标到相应的resize-cursor,所以用户知道他可以调整大小
面板.

这可以很好的工作,因为我没有点击任何其他应用程序
例如Safari或Finder.

从我一度把焦点放在另一个应用程序的那一刻,
我可以点击并将鼠标悬停在我的面板上,就像我想要的那样
光标样式不会改变 – 它始终保持箭头,不可能返回正常行为.

面板保持可选择,在前面,您仍然可以移动并调整大小,
但鼠标光标始终保持箭头.然后你甚至不能改变它
手动使用如下[[NSCursor crosshairCursor] set].

所以我需要找到一种方法来创建保持正常的NSPanel
自动变-cursorstyle-当悬停-过面板边缘行为
即使您将重点放在另一个应用程序上.

我已经尝试使用一个定制的NSPanel类,
我已经覆盖了canBecomeKeyWindow和
canBecomeMainWindow方法,让它们返回YES
但即使我使我的Panel KeyWindow和MainWindow …

[myPanel makeKeyAndOrderFront:self];
[myPanel makeMainWindow];

…它不能解决游标问题.

如果有人可以在这里帮助我会很棒:)

PS:在我的项目中,Base SDK和部署目标设置为10.8

所以我发现所描述的问题与面板的窗口状态毫无关系.如果它设置为键或主键,这并不重要,而是光标问题(始终保持箭头)与应用程序的激活状态有关.

只要拥有面板的应用程序处于活动状态,一切都可以正常工作,但是如果单击另一个应用程序,我的应用程序将被停用,并且不会再次启用 – 即使您单击面板 – 因为“非激活”选项是启用.

问题是我需要“非激活”选项,因为我正在创建一个状态栏 – 屏幕捕获应用程序,应该显示和操作在其他的前面,但不停用任何正在运行的应用程序.我可以解决光标问题

[NSApp activateIgnoringOtherApps];

但是随后在Safari中运行的全屏视频的屏幕截图将停用Safari并最大限度地减少视频(我不想要的).

解决方法

我不认为通过普通的API可以在您的应用程序不活动时更改光标.我很确定窗口系统不允许:它会违反应用程序之间的界限 – 如果您尝试从背景设置游标,并且前台应用程序还会尝试设置游标,谁将赢得?

当然,系统可以做到这一点(就像当你使用⌘⇧4拍摄截图时),因为这是在窗口系统本身.

原文地址:https://www.jb51.cc/c/115622.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐