7

我正在使用 Xcode 开发一个 mac osx 应用程序。我想在所有应用程序之上添加一个透明的全屏视图/窗口。这样我就可以在透明视图上“绘制”,其背后将是任何应用程序、safari、word 等。

我试过如下

 NSRect rect = [[NSScreen mainScreen] frame];   //this is full screen size, but still with the status bar like time, battery, etc.

 NSWindow *overlayWindow = [[NSWindow alloc]initWithContentRect:rect
 styleMask:NSBorderlessWindowMask
 backing:NSBackingStoreBuffered
 defer:NO];
 overlayWindow.backgroundColor = [NSColor redColor];
 [self.window addChildWindow:overlayWindow ordered:NSWindowAbove];

这是我的 mac 应用程序的一个新的全屏子窗口。但它并不是我在我的 Mac 上运行的所有应用程序之上的。

所以我的问题是,如何在我的 mac 屏幕视图顶部添加视图(不仅是我的应用程序的顶部视图)。非常感谢!!!

4

3 回答 3

11

请参阅 Apple 的FunkyOverlayWindow 示例代码。除了设置窗口的级别之外,您还需要将其背景颜色设置为清除并将其设置为不透明。如果它是透明的,但您仍然希望它接收用于绘制的鼠标事件(而不是让它们通过它后面的窗口),您需要执行[window setIgnoresMouseEvents:NO].

于 2013-05-27T23:19:19.263 回答
4

这看起来像你想要的。

NSWindow- (void)setLevel:(NSInteger)windowLevel

有了这个有用的预定义级别。选一个你喜欢的。如果您希望它略高于或略低于这些水平之一,请加或减 1。

#define NSNormalWindowLevel          kCGNormalWindowLevel
#define NSFloatingWindowLevel        kCGFloatingWindowLevel
#define NSSubmenuWindowLevel         kCGTornOffMenuWindowLevel
#define NSTornOffMenuWindowLevel     kCGTornOffMenuWindowLevel
#define NSMainMenuWindowLevel        kCGMainMenuWindowLevel
#define NSStatusWindowLevel          kCGStatusWindowLevel
#define NSModalPanelWindowLevel      kCGModalPanelWindowLevel
#define NSPopUpMenuWindowLevel       kCGPopUpMenuWindowLevel
#define NSScreenSaverWindowLevel     kCGScreenSaverWindowLevel
#define NSDockWindowLevel            kCGDockWindowLevel
于 2013-05-27T21:33:49.980 回答
1

我的问题只是因为我没有将 self.window 设置为顶层。然后我向 self.window 添加一个子视图(设置在顶部)。如果我只将 childview 设置为顶部,它什么也不做。

肯和史蒂夫的回答是有原因的。非常感谢。

于 2013-05-28T19:34:26.943 回答