2011-01-03 16 views
2

Ich habe den folgenden Code, der meist funktioniert abgesehen von ich kann nie die myWindow, die ich erstellen. Wenn ich [myWindow isVisible] mache, gibt es 1 zurück. Die CGDisplayCapture funktioniert gut, da es den Bildschirm ausblendet. Ich habe alle Variablen überprüft, die ich an die NSWindow-Init-Methode übergebe.Cocoa Vollbild-Fenster auf dem sekundären Display

Fehle ich etwas wirklich offensichtlich? Hier ist der Code:

// 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]; 

Prost

Antwort

1

Was dieses Fenster wie sieht, wenn Sie es nicht den gesamten Bildschirm?

Ich sehe nicht, dass Sie dem Fenster, das Sie erstellen, Ansichten hinzufügen. Wenn die Inhaltsansicht Ihres Fensters eine NSView-Instanz ist, wird keine Zeichnung ausgeführt.

+0

Wenn ich einfach '[[NSWindow alloc ] init]; 'Dann erscheint ein kleines blaues Fenster. Vielleicht ist es etwas in dieser Methode, aber 'screenRect' und' screen' sind in Ordnung, da ich sie mit 'NSLog' überprüft habe. – jdelaune

+0

Es ist lange her, dass ich ein Fenster im Vollbildmodus machen musste, so wie du es machst. Gibt es einen Grund, warum Sie nicht -enterFullScreenMode: withOptions: an eine Ansicht senden, die alles enthält, was Sie zeichnen möchten? – NSResponder

+0

Denken Sie nicht so, aber sicherlich müssen Sie ein Fenster trotzdem erstellen, um eine Ansicht zu enthalten, können Sie eine Vollbildansicht ohne ein Fenster sicher nicht machen? Ich habe '[NSScreen mainScreen]' in den Bildschirmparameter übergeben und das hat funktioniert, also muss ich herausfinden, warum es nicht den 'NSScreen' mag, den ich es sendend, wie mainScreen verwendend, ist nicht so zuverlässig, wenn ich die Sekundäranzeige will . Wenn das nicht funktioniert, werde ich die Ansichtslösung ausprobieren. Danke für deine Hilfe. – jdelaune

3

Wenn Sie 10.5 oder höher benötigen können, bitte Verwendung NSView des -enterFullScreenMode:withOptions: und die passenden -exitFullScreenModeWithOptions :. Dies verschiebt die Verantwortung korrekt auf eine Containeransicht (die immer noch einen eigenen komplexen Satz von Untersichten haben kann) und befreit Sie von einigen der Fehler, manuell mit Fensterebenen usw. zu verfahren.

Verwandte Themen