我正在(重新)编写一个小应用程序来控制 USB 设备。我希望该应用程序的窗口始终完全可见。因此,当您在窗口周围移动时,当底部碰到屏幕底部或其中一个侧面碰到屏幕侧面时,它就会停止移动。
这是可能吗?
是的,这是可能的。带有标题栏的普通 NSWindows 会限制它们自己的框架以不允许窗口顶部离开屏幕顶部。这是在-[NSWindow constrainFrameRect:toScreen:]
你可以覆盖这个方法来约束你想要的框架。
如果要阻止用户自由移动窗口,只需制作一个没有标题栏的自定义窗口即可。有一个标题栏向用户表明窗口可以移动,所以这里的解决方案是没有一个。然后,无法控制它的移动。您需要提供自己的控件来关闭窗口。
由于Ken Aspeslagh提供的代码示例不再通过 Dropbox 链接提供,我认为分享我的解决方案会很有用。对于我的项目,我只需要担心屏幕的底部和右侧,但其他人应该能够适应这一点以解决屏幕的顶部和左侧。
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
{
if (((self.frame.origin.x + self.frame.size.width) > screen.frame.size.width) && (screen.frame.size.width > 0))
{
frameRect.origin.x = (screen.frame.size.width - self.frame.size.width);
}
if (self.frame.origin.y < 0)
{
frameRect.origin.y = 0;
}
return frameRect;
}