如何将Mac窗口强制置于前台?

6

我如何以编程方式强制将Mac窗口置于前台?我有窗口句柄,并希望确保我的窗口显示在所有其他窗口之上。我可以使用Carbon和Cocoa来实现。


你是在说你自己程序里的窗口吗?还是想要处理其他应用程序的窗口? - Yuji
2
Raymond Chen曾经写过这个问题,他问了一个重要的问题:“如果两个程序都这样做怎么办?”一旦你意识到这一点,你就会明白永远不能_强制_这样做,只能_请求_这样做。 - MSalters
2个回答

13

对于Cocoa,您可以使用以下方式设置窗口级别:

[window setLevel:NSFloatingWindowLevel];

一个悬浮窗口会显示在所有其他常规窗口的上方,即使您的应用程序没有处于活动状态。

如果要使您的应用程序处于活动状态,可以使用:

[NSApp activateIgnoringOtherApps:YES];

[window makeKeyAndOrderFront:nil];

0

如果您可以(仅限32位)使用kOverlayWindowClass:

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

否则创建一个NSWindow并将窗口级别设置为kCGOverlayWindowLevel
请注意,这将位于仪表板之上。如果您想在仪表板下方,请使用kCGUtilityWindowLevel。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接