【问题标题】:How to prevent other applications from changing my NSWindow frame如何防止其他应用程序更改我的 NSWindow 框架
【发布时间】:2015-11-17 22:14:34
【问题描述】:

我正在实现一个具有自己的捕捉行为的 NSWindow,以及与标准窗口略有不同的其他功能集。

在使用 BetterSnapTool 等辅助软件时,将 NSWindow 拖到边缘会触发 BetterSnapTool 的捕捉,从而干扰我的 NSWindow 的捕捉。

如何防止 BetterSnapTool 等其他应用程序尝试修改我的 NSWindow 的框架?

【问题讨论】:

  • 对于 BetterSnapTool 的作者来说,这似乎是一个问题,不是吗?很难看到这里有人能告诉你什么,因为答案将取决于 BetterSnapTool 在内部是如何实现的(并且可能取决于 BetterSnapTool 的版本等)

标签: objective-c macos cocoa


【解决方案1】:

我想出了一个解决方案。它更像是针对这种特定场景量身定制的解决方案,但希望它对其他人有用。

为防止 BetterSnapTool 和其他人在您移动 NSWindow 的框架时对其进行修改,您可以在用户拖动窗口时阻止调整窗口大小,然后在移动完成后重置遮罩。

在处理NSWindowWillMoveNotification通知时,可以去掉NSWindow的样式掩码中的NSResizableWindowMask

self.styleMask &= ~NSResizableWindowMask;

然后,在通知NSWindowDidMoveNotification的处理程序上,您可以恢复样式掩码。

self.styleMask |= NSResizableWindowMask;

具体的实现可能会有所不同,具体取决于您的窗口拖动行为的自定义程度。在我的例子中,我有自定义的拖动行为,具体取决于鼠标事件,我修改了右侧 mouseDownmouseUp 事件的窗口掩码。

【讨论】:

    【解决方案2】:

    简短的回答是:你不能。

    即使有办法限制对应用程序窗口的外部干扰,阻止这种外部修改也可能会扰乱其他行为,例如 Mission Control。

    【讨论】:

      猜你喜欢
      • 2013-09-12
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2014-06-19
      相关资源
      最近更新 更多