Monthly Archives: May 2009

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; } 好了,全屏程序就这样建立了。

无题

最近一段时间忙项目,也没时间写东西。前两天刚忙完,只顾休息了,也没上来写。好不容易今天才有时间来写点东西。 读书:最近读了清华老教授何兆武的回忆录,书名是《上学记》。从他的回忆中能感到他对西南联大那段时期自由民主的学校氛围的怀念,他解释说那段时间除了那么多学术牛人的原因就是自由,他强调搞学术就是要自由。的确是这样,如果教授不能教自己喜欢交的,学生不能学自己喜欢学的,学术研究当然会停滞不前。那段时期的教授还真的都是大家学者,专心学术,同时心里还有一个民主自由的梦想为之奋斗。看看当今校园中大部分所谓教授,有哪些是专心学术,敢称自己为大家,哪个不为了项目资金使劲剥削学生。同时何先生的回忆也改变了我对那段时期的认识。虽然那时中国处于战乱年代,但远没有今天封闭,大家真的可以有各种思想,各种信仰。那时的北京也很发达了,可以看到好莱坞大片哦。 电影:今天看了《star trek》,总体还算可以,特效也不错,但没有什么新意。就算是为延续了近40年的星际迷航传奇一个开始吧。不过还是不如《star wars》来的好。