2013-02-25 5 views
0

J'essaie de définir une fenêtre similaire à Mission Control et Exposé. J'ai créé un NSWindow personnalisé qui est transparent et a un contour similaire à this question, mais je ne veux pas que l'utilisateur interagisse avec cette fenêtre.Décrire une fenêtre système

Y at-il un moyen de le faire?

ci-dessous est mon habitude NSWindow, que j'ai appelé avec

windowOutline = [[WindowOutline alloc] initWithContentRect:rect styleMask:1 backing:NSBackingStoreBuffered defer:false]; 
    [windowOutline makeKeyAndOrderFront:self]; 
    [windowOutline drawRect:rect]; 

- (id)initWithContentRect:(NSRect)contentRect 
       styleMask:(NSUInteger)windowStyle 
        backing:(NSBackingStoreType)bufferingType 
        defer:(BOOL)flag 
{ 
    self = [super 
      initWithContentRect:contentRect 
      styleMask:NSBorderlessWindowMask 
      backing:bufferingType 
      defer:flag]; 
    if (self) 
    { 
     [self setOpaque:NO]; 
     [self setBackgroundColor:[NSColor clearColor]]; 
    } 
    return self; 
} 

- (void)drawRect:(NSRect)frame { 
    frame = NSInsetRect(self.frame, 3.0, 3.0); 

    [NSBezierPath setDefaultLineWidth:6.0]; 

    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame 
                 xRadius:6.0 yRadius:6.0]; 
    [[NSColor redColor] set]; 
    [path stroke]; 
} 
+0

Qu'avez-vous essayé? Pourriez-vous poster un code pour accompagner votre description? – Jules

+0

Là. Ajouté dedans. – agg23

Répondre

1

Vous êtes déjà à mi-chemin. Vous devez créer une fenêtre personnalisée et une vue de contenu comme décrit in the answer you've already found. Notez que drawRect: est dans la vue personnalisée (que vous définissez comme contentView de votre fenêtre), pas dans votre sous-classe de fenêtre. À partir de votre extrait de code, il n'est pas tout à fait clair si vous l'avez configuré de cette façon. Vous devriez maintenant avoir une fenêtre transparente et délimitée.

Vous aurez alors besoin de:

  1. Définir le niveau de la fenêtre -[NSWindow setLevel:] l'une des constantes ci-dessus NSNormalWindowLevel.
  2. Faites de votre application une application d'agent afin qu'elle n'apparaisse pas dans le Dock etc. en définissant LSUIElement dans Info.plist.
  3. Définissez ignoresMouseEvents sur la fenêtre à YES.
+0

Cela a fonctionné parfaitement. Merci beaucoup! – agg23

Questions connexes