How to write a full screen cocoa progam

最近正好要写一个全屏的cocoa程序,所以就研究了一些用cocoa怎么写全屏的程序。

说起来全屏程序很简单,就是首先要拿到你要全屏的显示设备的ID,然后获取这个设备。接着建立一个无边界的窗口,将其大小设置为屏幕的大小,然后显示就可以了,这个窗口里面可以显示你需要的任何东东,包括按钮,滚动条等等,不过一般全屏要么显示图片,要么显示视频,再就是3D程序,所以也不会放上很丑的这些按钮什么的。

首先是获得显示设备的ID,你可以使用

CGDisplayErr CGGetActiveDisplayList (
   CGDisplayCount maxDisplays,
   CGDirectDisplayID *activeDspys,
   CGDisplayCount *dspyCnt
);

去获得所有的可用的显示设备,然后用设备ID调用函数

CGDisplayErr CGDisplayCapture (
   CGDirectDisplayID display
);

去获得这个设备。接着,我们建立一个无边界的窗口:

- (id)initWithContentRect:(NSRect)contentRect 
styleMask:(NSUInteger)windowStyle 
backing:(NSBackingStoreType)bufferingType 
defer:(BOOL)deferCreation 
screen:(NSScreen *)screen

其中参数windowStyle设置为NSBorderlessWindowMask就是无边界窗口,screen要设置成为屏幕大小。我的程序里面完整的调用如下:

[[YLFullScreenWindow alloc] initWithContentRect:screenRect 
styleMask:NSBorderlessWindowMask 
backing:NSBackingStoreBuffered 
defer:NO 
screen:[NSScreen mainScreen]];

然后显示这个窗口就可以了。
我的程序中之所以使用YLFullScreenWindow,是因为要想全屏窗口响应鼠标事件,必须自己重载NSWindow这个类,重写一下函数- (BOOL)canBecomeKeyWindow,使其总是返回YES:

- (BOOL)canBecomeKeyWindow
{
	return YES;
}

好了,全屏程序就这样建立了。

2 Comments

Post a Comment

Your email is never shared. Required fields are marked *