关于Objective C:在坐标处绘制窗口或在NSStatus项外部绘制

 2021-04-09 

Drawing a Window at Coordinates or Drawing outside of NSStatus Item

我正在尝试在NSStatusItem的侧面显示一些内容。我想我可以通过两种方式做到这一点:

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

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

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


系统将阻止您在状态项之外绘制图形,但是可以使用透明窗口。

1
2
3
4
5
6
7
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是一个自定义视图,它将作为窗口的背景。为了使窗口透明,您必须将背景色设置为清除,或者使用仅在不透明的位置绘制的自定义内容视图。您可能需要使用浮动窗口,以使其停留在顶部。请注意不要掩盖重要的内容,因为您的窗口可能会拦截针对其下方内容的事件。