2013-05-27 57 views
3

我正在使用Xcode的mac osx應用程序。我想在所有應用程序的頂部添加一個透明的全屏視圖/窗口。這樣我就可以在透明視圖上「繪製」,並且在它後面將是任何應用程序,Safari,單詞等等。可可應用程序在運行應用程序的所有mac上創建透明視圖

我試着像下面

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屏幕視圖(不僅是我的應用程序的頂部視圖)。 非常感謝!

回答

2

這看起來像你想要的。

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 
+0

我只是想,這裏的setLevel是在我編程的當前應用程序中設置透明窗口級別「僅」。是對的嗎 ?如果我將其他人稱爲safari,safari頁面將位於透明窗口的頂部。在我看來,無論我打開了哪些其他軟件,透明級別應始終存在。 – user2152814

+0

不,它會保持在其他應用程序的前面,只要你給它足夠高的水平。 –

+0

好,非常感謝。我會再試一次。 – user2152814

9

請參閱Apple的FunkyOverlayWindow sample code。除了設置窗口級別之外,還需要設置其背景色以清除並將其設置爲非透明。如果它是透明的,但您仍然希望它接收繪製的鼠標事件(而不是讓它們通過窗口後面的窗口),則需要執行[window setIgnoresMouseEvents:NO]

+0

謝謝,我會檢查。 – user2152814

1

我的問題是因爲我沒有將self.window設置爲頂層。然後,我添加一個childview(設置在頂部)self.window。如果我只將childview設置爲頂部,它什麼也不做。

肯和史蒂夫的答案有理由。非常感謝。

相關問題