我目前正在向OS X中的OpenGL窗口添加全屏視圖。我沒有使用OS X的「全屏模式」,因爲我不喜歡接管用戶屏幕。Make Cocoa Window Fullscreen
我有我自己的自定義窗口類從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];
}
}
這似乎大多正常,全屏窗口之間切換(每個蘋果的文檔here)和一半的屏幕分辨率的窗口。
問題是,在兩種模式之間切換會使我的窗口「失去焦點」。如果我在切換模式後立即使用了我正在使用的鍵盤快捷鍵,則會出現OS X錯誤「嗶嗶聲」。我必須點擊窗口才能「重新激活」它,然後才能再次使用切換。
我試着給我的函數添加一個[self makeKeyAndOrderFront:nil];
,但那不能解決問題。我需要的是在轉換過程中保持窗口「專注」的方式。除了這個問題,這個方法完美無缺,不需要修改我的NSView
。
編輯
不知道它的相關性,但我編程方式創建這個窗口,而不是從筆尖加載它。
無邊距窗口不鍵,默認情況下,所以您需要覆蓋'-canBecomeKeyWindow': - (BOOL)canBecomeKeyWindow { \t return YES; }另外我會建議使用'-setFrame:display:animate:'而不是'-setFrame:display',那麼你會得到很好的動畫。 –
@JustinBoo:添加'canBecomeKeyWindow'似乎沒有什麼區別。至於渲染,我使用'CVDisplayLink' :-) – Kyle
爲了記錄,有一個很好的頁面與相關信息[這裏](http://cocoadev.com/wiki/BorderlessWindow),但它不似乎也提供了一個很好的解決方案。有人說使用'NSWindowController'可以解決這個問題,但這對我不起作用。 – Kyle