我目前正在向 OS X 中的 OpenGL 窗口添加全屏视图。我没有使用 OS X 的“全屏模式”,因为我不喜欢接管用户屏幕的想法。
我有自己的自定义窗口类派生自该类,NSWindow
并且在该类中,我覆盖了toggleFullscreen:
选择器:
- (void)toggleFullScreen:(id)sender
{
_fullscreen = !_fullscreen;
if(_fullscreen) {
NSRect screenRect = [[NSScreen mainScreen] frame];
[self setStyleMask:NSBorderlessWindowMask];
[self setFrame:screenRect display:YES];
[self setLevel:NSMainMenuWindowLevel+1];
[self setOpaque:YES];
[self setHidesOnDeactivate:YES];
} else {
NSRect screenRect = [[NSScreen mainScreen] frame];
unsigned int width = (unsigned int)(screenRect.size.width/2.0f);
unsigned int height = (unsigned int)(screenRect.size.height/2.0f);
NSRect frame = NSMakeRect(0, screenRect.size.height-height, width, height);
[self setStyleMask:NSTitledWindowMask | NSResizableWindowMask];
[self setFrame:frame display:YES];
[self setLevel:NSNormalWindowLevel];
[self setOpaque:YES];
[self setHidesOnDeactivate:NO];
}
}
这似乎工作正常,在全屏窗口(根据此处的 Apple 文档)和屏幕分辨率一半的窗口之间切换。
问题是在两种模式之间切换会使我的窗口“失去焦点”。如果我在切换模式后立即按下我正在使用的键盘快捷键,我会收到 OS X 错误“哔”。我必须在窗口中单击以“重新激活”它,然后才能再次使用切换。
我尝试将 a 添加[self makeKeyAndOrderFront:nil];
到我的函数中,但这并不能解决问题。我所需要的只是一种在过渡期间保持窗口“聚焦”的方法。除了那个问题,这个方法工作得很好,不需要对我的NSView
.
编辑
不确定它是否相关,但我正在以编程方式创建此窗口,而不是从 Nib 加载它。