【问题标题】:How to force Mac window to foreground?如何强制Mac窗口到前台?
【发布时间】:2011-02-15 08:52:06
【问题描述】:

如何以编程方式强制将 mac 窗口设置为前窗口?我有窗口句柄,并希望确保我的窗口显示在所有其他窗口之上。为此,我可以同时使用 Carbon 和 Cocoa。

【问题讨论】:

  • 你说的是你自己程序中的一个窗口吗?还是要处理其他应用的窗口?
  • Raymond Chen 写到了这个问题,他问了一个重要的问题:“如果两个程序这样做会怎样?”一旦你意识到这一点,你就会明白永远不能强制 this,只能request this。

标签: c++ cocoa macos graphics macos-carbon


【解决方案1】:

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

[window setLevel:NSFloatingWindowLevel];

即使您的应用未处于活动状态,浮动窗口也会显示在所有其他常规窗口之上。

如果您想让您的应用处于活动状态,您可以使用:

[NSApp activateIgnoringOtherApps:YES];

[window makeKeyAndOrderFront:nil];

【讨论】:

    【解决方案2】:

    如果可以(仅限 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      相关资源
      最近更新 更多