如何使 NSWindow 阻止其他 Windows?

Posted

技术标签:

【中文标题】如何使 NSWindow 阻止其他 Windows?【英文标题】:how to make an NSWindow blocking other Windows? 【发布时间】:2010-11-01 17:54:39 【问题描述】:

我正在寻找一种拥有 NSWindow 的方法,它能够像菜单栏一样阻止其他 NSWindows。我的意思是:不可能在菜单栏上拖动一个窗口。 我自己的 NSWindow 可以实现这种行为吗?

提前致谢 比扬

【问题讨论】:

【参考方案1】:

NSWindow 的拖动行为会自动阻止窗口进入菜单栏下方——因为它们不应该这样做。如果您有一些特殊情况,您可以覆盖标准的拖动行为。但在放弃 HIG 规定的标准功能之前,请仔细考虑。

此外,不能将窗口拖到菜单栏上(而不是),除非它也在其他所有内容上,因为菜单栏通常是高于所有其他窗口。

【讨论】:

好的,如果我理解正确的话,NSWindows 的行为是不进入菜单栏而不是菜单栏。如果是这样,我必须修改当前运行的所有其他窗口的拖动行为,除了我的?这听起来不可能…… @bijan:这实际上并非不可能,但它需要一些非常复杂的黑客攻击,并且可能会在主要操作系统版本之间中断。 bijan:即使您可以对所有使用 NSWindow 的应用程序实施此 hack,它也不适用于任何不使用 NSWindow 的应用程序(因为它们使用 X11 或 Window Manager 代替)或实现它们的自己的自定义拖动逻辑。 大声思考:因此 NSWindow 可能会获取菜单栏的(高度)属性以了解区域的开始位置,它可能不会在上方绘制。那么是否可以将菜单栏的该属性设置为另一个值(不改变它的实际高度)? (我的窗口应该出现在菜单栏的正下方。) @bijan:AppKit 的概念是用不同的矩形表示整个桌面、每个屏幕、它将创建窗口的区域以及可以移动窗口的区域。最后一个不包括菜单栏覆盖的区域。如果没有黑客攻击,除了在您自己的应用程序中显示和隐藏之外,您无法对菜单栏执行任何操作。影响其他应用程序的窗口(包括菜单栏)需要入侵整个系统或 Dock。【参考方案2】:

我只是偶然发现了this 的问题。他们说可以使用 Accessibility API 或 Quartz Window Services 移动其他窗口。 我不能只读出另一个窗口的位置并移动它们,以免它们与我的窗口发生碰撞吗?可能由 0.1 秒触发。计时器?

【讨论】:

以上是关于如何使 NSWindow 阻止其他 Windows?的主要内容,如果未能解决你的问题,请参考以下文章

当 XNA windows 游戏关闭时,如何阻止 SoundEffect 使它们崩溃?

如何将 NSWindow 带到前面和当前空间?

如何使表单始终位于任务栏顶部

如何阻止 git 在 cygwin 上使文件不可执行?

如何在另一个 NSView 下阻止 NSView 事件?

如何以编程方式关闭全屏模式NSWindow?