Cocoa app Create transparent view on top of all mac running applications

I am working on a mac osx application using Xcode. I would like to add a transparent full-screen view/window on top of all applications. So that I could ‘draw’ on the transparent view, and behind it will be whatever application, safari, word…etc.

I tried like the following

  • Metal kernels not behaving properly on the new MacBook Pro (late 2016) GPUs
  • Reading data (embedded plist) linked to executable through -sectcreate __TEXT
  • CBPeripheralManager startAdvertising not working on OS X yosemite
  • How to add a time interval to an NSDate?
  • NSString instance reports its class as NSCFString
  • How to know what Mac OS the app is running on?
  •  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];
    

    It’s a new full-screen child window of my mac-application. But it’s not on top of all applications i am running on my mac.

    So my question,
    How to add the view on top of my mac screen view(not only the top view of my application).
    Thanks so much!!!

    3 Solutions Collect From Internet About “Cocoa app Create transparent view on top of all mac running applications”

    See Apple’s FunkyOverlayWindow sample code. In addition to setting the window’s level, you will need to set its background color to clear and set it to non-opaque. If it’s transparent but you still want it to receive mouse events for drawing (rather than letting them pass through to the windows behind it), you’ll need to do [window setIgnoresMouseEvents:NO].

    This looks like what you want.

    NSWindow has - (void)setLevel:(NSInteger)windowLevel

    With this useful predefined levels. Pick one you like. Add or subtract 1 if you want it just above or just below one of these levels.

    #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
    

    My problem was just because I didn’t set the self.window to the top layer. Then I add a childview(set to the top) to the self.window. It does nothing if I only set childview to top.

    Ken and Steve’s answers have reasons. Thanks a lot.