Полноэкранное окно какао на дополнительном дисплее

У меня есть следующий код, который в основном работает, за исключением того, что я никогда не вижу myWindow, который я создаю. Если я делаю [myWindow isVisible], он возвращает 1. CGDisplayCapture работает нормально, так как гасит экран. Я проверил все переменные, которые я передаю в метод инициализации NSWindow.

Я упускаю что-то действительно очевидное? Вот код:

// Find the screen we want
NSScreen *screen                = [[NSScreen screens] objectAtIndex:1];
NSNumber *displayID             = [[screen deviceDescription] 
                                  objectForKey:@"NSScreenNumber"];
CGDirectDisplayID CGDisplayID   = (CGDirectDisplayID) [displayID intValue];

// Capture the secondary display
if (CGDisplayCapture( CGDisplayID ) != kCGErrorSuccess) {
  NSLog( @"Couldn't capture the secondary display" );
}

// Draw a new window to fill the screen
NSRect screenRect = [screen frame];
NSWindow *myWindow = [[NSWindow alloc] initWithContentRect:screenRect
                                               styleMask:NSBorderlessWindowMask
                                                 backing:NSBackingStoreBuffered
                                                   defer:NO
                                                  screen:screen];

// Set the level of the new window and other settings
NSInteger windowLevel = CGShieldingWindowLevel();
[myWindow setLevel: windowLevel];
[myWindow setBackgroundColor:[NSColor blueColor]];
[myWindow makeKeyAndOrderFront:nil];

Ваше здоровье


person jdelaune    schedule 03.01.2011    source источник


Ответы (2)


Если вам нужна версия 10.5 или выше, пожалуйста, используйте -enterFullScreenMode:withOptions: и соответствующий -exitFullScreenModeWithOptions:. Это должным образом перекладывает ответственность на контейнерное представление (которое по-прежнему может иметь свой собственный сложный набор подпредставлений) и освобождает вас от некоторых ошибок, связанных с ручным управлением уровнями окон и т. д.

person Joshua Nozzi    schedule 03.01.2011

Как выглядит это окно, если его не развернуть на весь экран?

Я не вижу, чтобы вы добавляли какие-либо виды в окно, которое вы создаете. Если представление содержимого вашего окна является экземпляром NSView, оно не будет выполнять никаких рисунков.

person NSResponder    schedule 03.01.2011
comment
Если я просто запущу [[NSWindow alloc] init];, у меня появится маленькое синее окно. Так что, возможно, это что-то в этом методе, но screenRect и screen в порядке, так как я проверил их с помощью NSLog. - person jdelaune; 03.01.2011
comment
Прошло много времени с тех пор, как мне нужно было сделать окно полноэкранным, как это делаете вы. Есть ли какая-то причина, по которой вы не просто отправляете -enterFullScreenMode:withOptions: в представление, содержащее все, что вы пытаетесь нарисовать? - person NSResponder; 03.01.2011
comment
Не думайте, но вам все равно нужно создать окно, чтобы содержать представление, вы не можете сделать представление полноэкранным без окна? Я передал [NSScreen mainScreen] в параметр экрана, и это сработало, поэтому мне нужно выяснить, почему ему не нравится NSScreen, которое я отправляю, поскольку использование mainScreen не так надежно, когда мне нужен дополнительный дисплей. Если это не сработает, я попробую решение для просмотра. Спасибо за помощь. - person jdelaune; 03.01.2011