J'ai cette boucle de message:

while (!shutdown_now_) 
    {
        NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
        NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask
                                            untilDate:[NSDate distantFuture]
                                               inMode:NSDefaultRunLoopMode
                                              dequeue:YES];
        if (event) [NSApp sendEvent:event];
        // If modifying window event, do something!!! 
        [pool drain];
    } 

Je veux filtrer tous les NSEvents qui modifient une fenêtre, par exemple déplacer, redimensionner, commander e.t.c. J'ai essayé de chercher le type dans documentation Apple < / a> mais sans succès. De l'aide? Merci!

0
Sanich 3 janv. 2016 à 16:06

2 réponses

Meilleure réponse

Le type d'événement que je recherchais est NSAppKitDefined:

while (!shutdown_now_) 
    {
        NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
        NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask
                                            untilDate:[NSDate distantFuture]
                                               inMode:NSDefaultRunLoopMode
                                              dequeue:YES];
        if (event.type == NSAppKitDefined)
        {
            NSLog(@"NSAppKitDefinedEvent with subtype: %d", event.subtype);
        }
        if (event) [NSApp sendEvent:event];
        [pool drain];
    }
0
Sanich 3 janv. 2016 à 16:24

Le filtrage des événements n'est pas la bonne approche pour cela.

Si vous ne souhaitez pas autoriser l'utilisateur à déplacer une fenêtre, définissez la propriété movable de la fenêtre sur false.

Si vous ne souhaitez pas autoriser l'utilisateur à redimensionner la fenêtre, définissez la fenêtre styleMask pour ne pas inclure NSResizableWindowMask. Ou, éventuellement, définissez ses contentMinSize et contentMaxSize sur sa taille actuelle.

Aucun événement ne peut commander directement une fenêtre. Le délégué de la fenêtre décide si le bouton de fermeture ferme ou non la fenêtre, en implémentant -windowShouldClose:. Si vous ne souhaitez pas du tout activer le bouton de fermeture, définissez styleMask pour ne pas inclure NSClosableWindowMask.

2
Ken Thomases 3 janv. 2016 à 13:17