How to force Mac window to foreground?

2020-02-12 07:06发布

问题:

How can I programmatically force a mac window to be the front window? I have the window handle, and want to ensure that my window is displayed above all other windows. I can use both Carbon & Cocoa for this.

回答1:

For Cocoa, you can set the window level using:

[window setLevel:NSFloatingWindowLevel];

A floating window will display above all other regular windows, even if your app isn't active.

If you want to make your app active, you can use:

[NSApp activateIgnoringOtherApps:YES];

and

[window makeKeyAndOrderFront:nil];


回答2:

If you can (32 bit only) use kOverlayWindowClass:

WindowRef carbon_window = NULL;
CreateNewWindow( kOverlayWindowClass , ... , &carbon_window );
// if you need cocoa:
NSWindow *cocoa_window = [[NSWindow alloc] initWithWindowRef:carbon_window];

Otherwise create an NSWindow and set the window level to kCGOverlayWindowLevel.

Note that this will be above the dashboard as well. If you want to be below the dashbord use kCGUtilityWindowLevel.