如何防止其他应用程序更改我的NSWindow框架

时间:2015-11-17 22:14:35

标签: objective-c macos cocoa

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

当使用像BetterSnapTool这样的辅助软件时,将NSWindow拖到边缘会触发BetterSnapTool的捕捉,干扰我的NSWindow的捕捉。

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

1 个答案:

答案 0 :(得分:1)

我为此找到了解决方案。它更适合这种特定场景的定制解决方案,但希望它对其他人有用。

为了防止BetterSnapTool和其他人在您移动它时修改NSWindow的框架,您可以在用户拖动窗口时阻止在窗口上调整大小,然后在移动完成后重置蒙版。

处理通知NSWindowWillMoveNotification时,您可以从NSWindow的样式掩码中删除NSResizableWindowMask

self.styleMask &= ~NSResizableWindowMask;

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

self.styleMask |= NSResizableWindowMask;

具体实现可能会有所不同,具体取决于窗口拖动行为的自定义方式。在我的情况下,我有自定义拖动行为取决于鼠标事件,我在右mouseDownmouseUp事件修改窗口的掩码。