在坐标处绘制窗口或在NSStatus项目外绘图

时间:2011-01-08 06:39:47

标签: objective-c cocoa macos

我试图在NSStatusItem旁边显示一些东西。我想我可以用两种方式做到这一点:

在鼠标光标的坐标处显示一个透明窗口,其中包含我需要的图像。

OR

使用自定义NSStatusItem并将视图中的控件/图像向左移动,使它们实际上不在状态项

问题是,将NSRect帧设置为负(-200,0,100,50)似乎实际上不起作用。那么,如何在状态项的边界之外渲染事物(想想CSS溢出属性)或在特定坐标处渲染透明窗口?

1 个答案:

答案 0 :(得分:1)

系统将阻止您在状态项之外绘图,但使用透明窗口将起作用。

NSRect rect; //The location of the window
NSWindow *win = [[NSWindow alloc] initWithContentRect:rect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
[win setOpaque:NO];

[win setBackgroundColor:[NSColor clearColor]];
//or
[win setContentView:myView];

这里,myView是一个自定义视图,它将成为窗口的背景。为了使窗口透明,您必须将背景颜色设置为清除或使用自定义内容视图,该视图仅绘制不透明的位置。您可能希望使用浮动窗口使其保持在顶部。小心不要掩盖一些重要的东西,因为你的窗户可以拦截用于下面某些东西的事件。