我希望我的应用程序能够显示在笔记本电脑屏幕和具有两个独立 NSWindow 的外部屏幕上,我找不到任何有关如何实现它的文档。有什么提示吗?
谢谢
最佳答案
OS X OpenGL Programming Guide显示制作全屏窗口的旧方法:
Create a screen-sized window on the display you want to take over:
NSRect mainDisplayRect = [[NSScreen mainScreen] frame]; NSWindow *fullScreenWindow = [[NSWindow alloc] initWithContentRect: mainDisplayRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
Set the window level to be above the menu bar.:
[fullScreenWindow setLevel:NSMainMenuWindowLevel+1];
Perform any other window configuration you desire:
[fullScreenWindow setOpaque:YES]; [fullScreenWindow setHidesOnDeactivate:YES];
Create a view with a double-buffered OpenGL context and attach it to the window:
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];
Show the window:
[fullScreenWindow makeKeyAndOrderFront:self];
您可以使用此方法在您想要绘制的每个屏幕上创建窗口。如果您使用它仅在一个屏幕上创建窗口,则另一个屏幕将继续正常工作,而不是被涂黑或被愚蠢的亚麻纹理覆盖。根据您的使用情况,您可能不想setHidesOnDeactivate
。
还有一些较低级别的 API 可以完全控制屏幕并防止操作系统或任何其他应用程序绘制到屏幕上,但它们的使用很少合理。
编辑:如果您希望拥有一个跨多个屏幕进行渲染的 GL 上下文,则需要使用跨所有屏幕的 NSRect
创建一个窗口。如果屏幕分辨率不匹配,可能会导致部分窗口不可见,并且低端图形芯片可能会出现一些问题。
关于objective-c - 如何在 Mac OS X Lion 上双屏显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12831249/