我希望我的应用程序显示在笔记本电脑屏幕和带有两个独立的NSWindow的外部屏幕上,我找不到任何关于如何实现它的文档。任何提示?
由于
答案 0 :(得分:1)
OS X OpenGL Programming Guide显示了制作全屏窗口的旧方式:
在您要接管的显示屏上创建一个屏幕大小的窗口:
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可以完全控制屏幕并防止操作系统或任何其他应用程序进入屏幕,但它们的使用很少被证明是合理的。
编辑:如果您希望在渲染跨越多个屏幕的情况下拥有一个GL上下文,则需要创建一个跨越所有屏幕的NSRect
的单个窗口。如果屏幕分辨率不匹配,可能会导致部分窗口无法看到,而低端图形芯片可能会出现问题。