第10回目 Cocoaでフルスクリーンモード

Cocoaアプリケーションでフルスクリーンを実現する方法です。
サンプルプログラムはESCキーを押すと終了します。

プログラム作成

MyOpenGLView.h

@interface MyOpenGLView:NSOpenGLView
{
	NSWindow *fullscreen_window;
}
@end

MyOpenGLView.m

- (void)awakeFromNib
{
	[[self window] makeFirstResponder:self];
	unsigned int window_style;
	NSRect screen_rect;
	window_style = NSBorderlessWindowMask;
	screen_rect = [[NSScreen mainScreen] frame];
	fullscreen_window = [[NSWindow alloc] initWithContentRect:screen_rect styleMask:window_style backing:NSBackingStoreBuffered defer:NO];
	if(fullscreen_window != nil)
	{
		[fullscreen_window setReleasedWhenClosed:YES];
		[fullscreen_window setContentView:self];
		[fullscreen_window makeKeyAndOrderFront:self];
		[fullscreen_window setLevel:NSScreenSaverWindowLevel - 1];
		[fullscreen_window makeFirstResponder:self];
	}
	[NSCursor hide];
}
NSOpenGLViewから派生したクラスのawakeFromNibに上記のコードを追加するだけ。
解像度はWindowsのDirectXと違い画面の解像度そのままでフルスクリーン化されるので注意が必要です。

各行の説明

  • [[self window] makeFirstResponder:self];
    ファーストレスポンダ指定。
  • screen_rect = [[NSScreen mainScreen] frame];
    画面のサイズを取得。
  • fullscreen_window = [[NSWindow alloc] initWithContentRect:screen_rect styleMask:window_style backing:NSBackingStoreBuffered defer:NO];
    フルスクリーン化。
  • [fullscreen_window setReleasedWhenClosed:YES];
    ウインドウが無くなったらメモリを開放。
  • [fullscreen_window setContentView:self];
    表示内容は自分自身。
  • [fullscreen_window makeKeyAndOrderFront:self];
    キーウインドウに設定。
  • [fullscreen_window setLevel:NSScreenSaverWindowLevel - 1];
    描画優先順位をスクリーンセーバーよりも1だけ下に設定。
  • [fullscreen_window makeFirstResponder:self];
    新しいウインドウもファーストレスポンダを引き継ぐ。
  • [NSCursor hide]
    カーソルを消す。

サンプルプログラム

前に戻る


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-16 (日) 15:25:52 (1987d)