Mi Cacao aplicación necesita algunos pequeños generado dinámicamente windows. ¿Cómo puedo crear mediante programación de Cacao de windows en tiempo de ejecución?

Este es mi trabajo-no intento hasta ahora. No veo resultado alguno.

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];
InformationsquelleAutor Steve McLeod | 2008-11-24

4 Comentarios

  1. 135

    El problema es que usted no quiere llamar display, desea llamar makeKeyAndOrderFront o orderFront dependiendo de si desea o no de la ventana para convertirse en la clave de la ventana. Usted debe también, probablemente, el uso de NSBackingStoreBuffered.

    Este código creará sus fronteras, ventana azul en la parte inferior izquierda de la pantalla:

    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.

    Puede hacer que el remitente para makeKeyAndOrderFront o orderFront lo que es adecuado para su situación.

    • Solo por curiosidad, a la persona que encontró mi respuesta /so/ ineficiente como para votar… ¿por qué era ineficiente?
    • No se preocupe acerca de la baja de los votantes Jason. He encontrado tu respuesta útil.
    • Esta respuesta me ha ayudado mucho!
    • Las grandes obras. El downvote debe ser porque usted está iniciando con «winRect», no de «marco», debe ser fijo.
    • Gracias, lo de la mano no di cuenta de ese error… fijo que tho.
    • Bonita respuesta. gracias
    • Pensé ARCO tuvo algo que ver con el por qué de mi ventana no se muestran.

  2. 38

    Una nota de lado, si usted desea a través de programación crear una instancia de la aplicación sin necesidad de un principal de la punta, en la principal.m /archivo puede instanciar el AppDelegate como a continuación. A continuación, en tus aplicaciones, Archivos de soporte /YourApp.plist Principal de la punta de archivo base /MainWindow.xib eliminar esta entrada. A continuación, utilice Jason Coco del enfoque para fijar la ventana en su AppDelegates método init.

    #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;
    }
    • Wow gracias. Buscado mucho para esta respuesta. Perfecto! Con el nuevo Objetivo-C 3.0 mejor usar @grupo de liberación automática {…}
  3. 2

    Esto es lo que he venido con mi mismo:

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

    Esto muestra una ventana azul. Espero que este es el enfoque óptimo.

    • No olvides que para que se suelte, y asignarlo a un fuerte o la retención de la propiedad (esto último es especialmente importante en virtud de ARCO: stackoverflow.com/q/7198562/30461 ).

Dejar respuesta

Please enter your comment!
Please enter your name here