我有一个带有NSBorderlessWindowMask样式的NSWindow的 Cocoa 应用程序(没有标题栏)。我想在窗口中放置图像,但图像的一部分应该放在窗口之外。
如何才能做到这一点?
我有一个带有NSBorderlessWindowMask样式的NSWindow的 Cocoa 应用程序(没有标题栏)。我想在窗口中放置图像,但图像的一部分应该放在窗口之外。
如何才能做到这一点?
这是我发现的两篇与您想做的事情相关的文章。
要点是将 NSWindow 子类化以使其成为无边框透明窗口,然后创建一个子视图来绘制您的自定义形状并使其成为窗口内容视图。
从样本的外观来看,阴影应该仍然适用。来自可可与爱:
对于我们绘制的任何形状,窗口后面的阴影都会自动绘制。完全清除的窗口的任何部分都不会收到鼠标点击(它们将穿过窗口)。
要绘制边框,请在视图类显示方法中执行以下操作:
NSBezierPath* border = [NSBezierPath bezierPathWithRect:self.frame];
[border setLineWidth: 1.0];
[[NSColor windowFrameColor] set];
[border stroke];
如果您没有自定义视图类,请[view lockFocus];
在执行该路径之前执行并替换self
为您的视图实例。画完后一定要做[view unlockFocus];
来自文档的一条重要信息涉及lockFocus
:
隐藏或缩小一次性窗口会导致该窗口的后备存储被释放。如果你不使用标准的显示机制来绘制,你应该使用 lockFocusIfCanDraw 而不是 lockFocus 如果在窗口被小型化或隐藏时有绘制的机会。
另一种肯定会保留阴影的方法是使用两个窗口并将一个窗口设置为另一个窗口。
由于各种原因,您将永远无法在窗口外绘图,其中最重要的是您的进程需要拥有或获得它所绘制的内容的权限(还有许多其他原因)。