[英]How to display on dual screens on Mac OS X Lion
我希望将我的应用程序同时显示在笔记本电脑屏幕和带有两个单独的NSWindow的外部屏幕上,但找不到有关如何实现它的任何文档。 有什么提示吗?
谢谢
《 OS X OpenGL编程指南》展示了制作全屏窗口的旧方法:
在要接管的显示器上创建一个屏幕大小的窗口:
NSRect mainDisplayRect = [[NSScreen mainScreen] frame]; NSWindow *fullScreenWindow = [[NSWindow alloc] initWithContentRect: mainDisplayRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
将窗口级别设置为在菜单栏上方。
[fullScreenWindow setLevel:NSMainMenuWindowLevel+1];
执行所需的任何其他窗口配置:
[fullScreenWindow setOpaque:YES]; [fullScreenWindow setHidesOnDeactivate:YES];
使用双缓冲OpenGL上下文创建视图,并将其附加到窗口:
NSOpenGLPixelFormatAttribute attrs[] = { NSOpenGLPFADoubleBuffer, 0 }; NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; NSRect viewRect = NSMakeRect(0.0, 0.0, mainDisplayRect.size.width, mainDisplayRect.size.height); MyOpenGLView *fullScreenView = [[MyOpenGLView alloc] initWithFrame:viewRect pixelFormat: pixelFormat]; [fullScreenWindow setContentView: fullScreenView];
显示窗口:
[fullScreenWindow makeKeyAndOrderFront:self];
您可以使用此方法在要绘制到的每个屏幕上创建窗口。 如果使用此方法仅在一个屏幕上创建一个窗口,则另一个屏幕将继续正常运行,而不是被涂黑或覆盖在愚蠢的亚麻质地中。 根据您的用途,您可能不希望setHidesOnDeactivate
。
还有一些较低级别的API可以完全控制屏幕,并防止OS或任何其他应用程序绘制到屏幕上,但是使用它们的理由很少。
编辑:如果要使一个GL上下文具有跨多个屏幕的渲染,则需要创建一个NSRect
跨所有屏幕的单个窗口。 如果屏幕分辨率不匹配,则可能导致部分窗口不可见,并且低端图形芯片可能会出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.