如何在全屏模式下创建HUD覆盖?

时间:2011-05-17 17:24:39

标签: objective-c cocoa overlay fullscreen hud

是否可以为以全屏模式运行的Cocoa应用程序添加HUD覆盖? 我按如下方式切换到全屏模式。

// An NSView.
[self enterFullScreenMode:m_screen withOptions:nil];

HUD叠加层属于NSPanel类型,是上述视图的成员。要显示HUD面板,请运行以下代码行。

[m_hudPanel setFloatingPanel:YES];
[m_hudPanel orderFront:self];
[m_hudPanel orderWindow:NSWindowAbove relativeTo:[[self window] windowNumber]];
[m_hudPanel makeKeyAndOrderFront:self];
[m_hudPanel makeFirstResponder:self];

但是,在我离开全屏模式之前,面板不会出现。

1 个答案:

答案 0 :(得分:2)

您必须提高窗口级别。我不知道-enterFullScreenMode:withOptions - 但是使用CoreGraphics全屏API,我们这样做了:

int level = CGShieldingWindowLevel();
[m_hudPanel setLevel:level];

或许你必须使用level + 1,我忘了。重点是,窗口首先按级别组织,然后在每个级别内组织。将窗口移动到前面时,它只会移动到其前面的水平。这样,背景,菜单栏,停靠栏和屏幕保护程序就会停留在它们应该的位置(它们只是特殊类型的窗口)。