Mon application Cocoa a besoin de quelques petites fenêtres générées dynamiquement. Comment créer par programmation des fenêtres Cocoa au moment de l'exécution?
C'est ma tentative qui n'a pas fonctionné jusqu'à présent. Je ne vois aucun résultat.
NSRect frame = NSMakeRect(0, 0, 200, 200);
NSUInteger styleMask = NSBorderlessWindowMask;
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];
NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreRetained defer:false];
[window setBackgroundColor:[NSColor blueColor]];
[window display];
Le problème est que vous ne voulez pas appeler display
, vous voulez appeler makeKeyAndOrderFront
ou orderFront
selon que vous voulez ou non que la fenêtre devienne la fenêtre clé . Vous devriez aussi probablement utiliser NSBackingStoreBuffered
.
Ce code créera votre fenêtre bleue sans bordure en bas à gauche de l'écran:
NSRect frame = NSMakeRect(0, 0, 200, 200);
NSWindow* window = [[[NSWindow alloc] initWithContentRect:frame
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO] autorelease];
[window setBackgroundColor:[NSColor blueColor]];
[window makeKeyAndOrderFront:NSApp];
//Don't forget to assign window to a strong/retaining property!
//Under ARC, not doing so will cause it to disappear immediately;
// without ARC, the window will be leaked.
Vous pouvez faire l'expéditeur pour makeKeyAndOrderFront
ou orderFront
tout ce qui est approprié à votre situation.
Une remarque, si vous souhaitez instancier l'application par programmation sans plume principale, dans le fichier main.m/vous pouvez instancier l'AppDelegate comme ci-dessous. Ensuite, dans vos applications Supporting Files/YourApp.plist Main nib base file/MainWindow.xib supprimez cette entrée. Ensuite, utilisez l'approche de Jason Coco pour attacher la fenêtre dans votre méthode init AppDelegates.
#import "AppDelegate.h":
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[NSApplication sharedApplication];
AppDelegate *appDelegate = [[AppDelegate alloc] init];
[NSApp setDelegate:appDelegate];
[NSApp run];
[pool release];
return 0;
}
Essayer
[window makeKeyAndOrderFront:self];
au lieu de
[window display];
C'est ce que vous visez?
Voici ce que j'ai trouvé moi-même:
NSRect frame = NSMakeRect(100, 100, 200, 200);
NSUInteger styleMask = NSBorderlessWindowMask;
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];
NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreBuffered defer:false];
[window setBackgroundColor:[NSColor blueColor]];
[window makeKeyAndOrderFront: window];
Cela affiche une fenêtre bleue. J'espère que c'est l'approche optimale.