我在XCode 4.6中使用NSPanel
而不是默认NSWindow
创建了一个简单的Cocoa-Application。当我启用非激活时
选项并启动应用程序一切正常:
面板显示在其他所有内容之前和之后 鼠标光标悬停在面板的边缘,它会从正常变化 arrow-cursor到适当的resize-cursor,因此用户知道他可以调整大小 小组。
这样可以正常工作,因为我没有点击任何其他应用程序 例如Safari或Finder。
从我曾经专注于另一个应用程序的那一刻起, 我可以点击并尽可能多地将鼠标悬停在我的面板上 光标样式不会再改变 - 它总是保持箭头,并且不可能返回到正常行为。
面板保持可选,在前面,您仍然可以移动并调整其大小,
但是鼠标光标始终保持箭头状态。然后你甚至无法改变它
手动使用类似:[[NSCursor crosshairCursor] set]
。
所以我需要找到一种方法来创建一个保持正常的NSPanel
自动变-cursorstyle-当悬停-过面板边缘行为
即使你把焦点放在另一个应用程序上也是如此。
我已经尝试使用自定义的NSPanel
类,
在哪里我覆盖了canBecomeKeyWindow
和。{
canBecomeMainWindow
方法,以便返回YES
但即使我制作了专家组KeyWindow
和MainWindow
...
[myPanel makeKeyAndOrderFront:self];
[myPanel makeMainWindow];
...它无法解决游标问题。
如果有人可以帮助我,那会很棒。)
PS:在我的项目中,Base SDK和部署目标设置为10.8
所以我发现所描述的问题与面板的窗口状态无关。如果将其设置为key或main,则无关紧要,而是游标问题(始终保持箭头)与应用程序的激活状态相关。
只要拥有该面板的应用程序处于活动状态,但是如果您单击另一个应用程序,我的应用程序将被停用并且不会再次激活 - 即使您单击该面板 - 因为“{{1} }“ - 选项已启用。
问题在于我需要“non-activating
”选项,因为我正在创建一个状态栏屏幕捕获应用程序,应该在其他所有应用程序之前显示和操作,但不会停用任何正在运行的应用程序。我可以通过
non activating
但随后拍摄在Safari中运行的全屏视频的屏幕截图会停用Safari并最小化视频,这是我不想要的。
答案 0 :(得分:1)
我不认为通过普通API可以在您的应用未激活时更改光标。我很确定窗口系统不允许它:它违反了应用程序之间的界限 - 如果你试图从后台设置光标,前台应用程序也试图设置光标,谁会赢了吗?
当然系统可以这样做(就像你用⌘⇧4截取屏幕截图一样),因为那是在窗口系统本身。