我正在尝试将本机 OSX 应用程序编写为一种广告/多媒体播放器,它将其内容分发到建筑物周围的多个屏幕上。输出显示器连接到 iMac 或 Macbook Pro 辅助输出,分辨率相同 (1280x720),并使用优质电缆和 VGA 分配器/增强器盒进行物理连接。
所以我要设置的是带有停靠栏和菜单栏的主屏幕将有播放列表。辅助监视器将具有视频输出-我正在使用 AVFoundation 进行视频播放,并且已经进行了各种测试以播放可编程视频。
我想让第二台显示器最初只有一个带有图像的黑屏,这样当什么都没有播放时,人们就会看到。
我在这里阅读这篇文章: 如何在 Mac OS X Lion 上显示双屏
但是,我似乎无法让它为我工作,并且有许多类似的示例代码相互冲突,所以我更多地问“我做错了什么?”。
到目前为止,测试应用程序是在 xcode(非文档)中创建为一个简单的 Cocoa 应用程序,这是我试图根据示例链接开始工作的代码:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
NSUInteger c = [[NSScreen screens] count];
NSLog(@"Number of screens = %li", (unsigned long)c);
if ([[NSScreen screens] count] > 1) {
NSLog(@"Attempting to setup second screen");
NSScreen *screen = [[NSScreen screens] objectAtIndex:1];
NSRect fs = [screen frame];
NSLog(@"Second screen frame = x=%f, y=%f, w=%f, h=%f", fs.origin.x, fs.origin.y, fs.size.width, fs.size.height);
NSRect ss = fs;
NSWindow *win2 = [[NSWindow alloc] initWithContentRect:ss
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:YES];
[win2 setBackgroundColor:[NSColor blackColor]];
[win2 setLevel:NSMainMenuWindowLevel+1];
[win2 setOpaque:YES];
[win2 setHidesOnDeactivate:YES];
NSOpenGLPixelFormatAttribute attrs[] =
{
NSOpenGLPFADoubleBuffer,
0
};
NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
NSRect viewRect = NSMakeRect(0.0, 0.0, fs.size.width, fs.size.height);
NSOpenGLView *fullScreenView = [[NSOpenGLView alloc] initWithFrame:viewRect pixelFormat: pixelFormat];
[win2 setContentView:fullScreenView];
[win2 makeKeyAndOrderFront:self];
NSButton *testButton = [[NSButton alloc] initWithFrame: NSMakeRect(50.0f, 50.0f, 100.0f, 50.0f)];
[testButton setTarget:self];
[testButton setAction:@selector(closeExternalWindow)];
[fullScreenView addSubview:testButton];
NSLog(@"Should have a black window with a button on it on monitor 2");
}
}
我已将 OpenGL.framework 添加到项目中并包含在我的 .h 文件中。
运行时,所发生的只是主窗口出现在主屏幕上,而辅助窗口没有任何变化。我在这个测试中期望的是一个黑屏,在辅助窗口上有一个按钮,主窗口出现在主屏幕上。
真的很感激理解我不理解的东西。
谢谢