[ Debutant ] Recuperer des evenements simples sur une NSWindow
mikaelo
Membre
[font=arial, helvetica, sans-serif]Bonjour tout le monde,
Comme pas mal de personne ici je debute sous cocoa/MAC/ios, donc si mon post n'est pas au bon endroit, je m'en excuse. J'ai cherché un sujet ressemblant mais sans succès.
En deux mots , je cherche a faire un truc super simple: lancer une fenetre vide et imprimer sur la console l'evenement du passage de souris et des touches clavier. Plutot que d'ecrire des tonnes , voici mon code:
Chez moi rien ne se passe. La fenetre s'affiche avec le bon titre mais rien de plus...
PS: Ne me repondez pas avec le lien de la doc apple, je suis deja en train de la bouffer ...[/font]
[font=arial, helvetica, sans-serif]Merci d'avance.[/font]
Comme pas mal de personne ici je debute sous cocoa/MAC/ios, donc si mon post n'est pas au bon endroit, je m'en excuse. J'ai cherché un sujet ressemblant mais sans succès.
En deux mots , je cherche a faire un truc super simple: lancer une fenetre vide et imprimer sur la console l'evenement du passage de souris et des touches clavier. Plutot que d'ecrire des tonnes , voici mon code:
<br />
// dans appDelegate.h[/color]<br />
[color=#5A5A5A]#import <Cocoa/Cocoa.h>[/color]<br />
[color=#5A5A5A]@class CWindow;<br />
@interface AppDelegate : NSObject <NSApplicationDelegate>[/color]<br />
[color=#5A5A5A]@property (assign) IBOutlet CWindow *window;[/color]<br />
[color=#5A5A5A]@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;<br />
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;<br />
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;[/color]<br />
[color=#5A5A5A]- (IBAction)saveAction:(id)sender;[/color]<br />
[color=#5A5A5A]@end[/color]<br />
<br />
[color=#5A5A5A]
<br />
//Dans appDelegate.m<br />
#import "AppDelegate.h"<br />
#import "CWindow.h"[/color]<br />
[color=#5A5A5A]@implementation AppDelegate[/color]<br />
[color=#5A5A5A]@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;<br />
@synthesize managedObjectModel = _managedObjectModel;<br />
@synthesize managedObjectContext = _managedObjectContext;[/color]<br />
[color=#5A5A5A]@synthesize window;[/color]<br />
[color=#5A5A5A]- (void)applicationDidFinishLaunching:(NSNotification *)aNotification<br />
{<br />
// Insert code here to initialize your application<br />
[window setTitle:@"Test sur la windows"];<br />
[window setAcceptsMouseMovedEvents:YES];<br />
//[aNotification get]<br />
}[/color]<br />
[color=#5A5A5A]// suite du template<br />
<br />
// CWindow.h[/color]<br />
<br />
[color=#5A5A5A]#import <Cocoa/Cocoa.h>[/color]<br />
[color=#5A5A5A]@interface CWindow : NSWindow<br />
- (void)keyDown:(NSEvent *)event;[/color]<br />
[color=#5A5A5A]@end[/color]<br />
<br />
[color=#5A5A5A]
[/color]<br />
[color=#5A5A5A]#import "CWindow.h"[/color]<br />
[color=#5A5A5A]@implementation CWindow[/color]<br />
[color=#5A5A5A]- (void)keyDown:(NSEvent *)event<br />
{<br />
NSLog(@"Received message keyDown");<br />
<br />
[super keyDown:event];<br />
}[/color]<br />
[color=#5A5A5A]- (void)mouseMoved:(NSEvent *)theEvent<br />
{<br />
NSLog(@"Received message mouseMoved");<br />
<br />
[super mouseMoved:theEvent];<br />
}[/color]<br />
[color=#5A5A5A]- (void)mouseDown:(NSEvent *)theEvent<br />
{<br />
NSLog(@"Received message mouseDown");<br />
<br />
[super mouseDown:theEvent];<br />
}[/color]<br />
<br />
[color=#5A5A5A]- (void)sendEvent:(NSEvent *)event<br />
{<br />
NSLog(@"Received message %s", __FUNCTION__);[/color]<br />
[color=#5A5A5A] [super sendEvent:event];<br />
}<br />
@end[/color]<br />
<br />
[color=#5A5A5A]
Chez moi rien ne se passe. La fenetre s'affiche avec le bon titre mais rien de plus...
PS: Ne me repondez pas avec le lien de la doc apple, je suis deja en train de la bouffer ...[/font]
[font=arial, helvetica, sans-serif]Merci d'avance.[/font]
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Et la fenêtre est bien définie de classe CWindow dans le fichier NIB ?
Je suis en fichier xib ( nouvelle version de xCode).
Ensuite dans l'interface graphique de xcode je vois la fenetre dans le fichier xib mais je n'arrive pas a voir de quel type est elle ( NSWindow ou mon type CWindow).
Merci
Mikael
Petite remarque. Ce n'est pas une bonne pratique d'attraper les événements avec une fenêtre. Ta fenêtre contient une ContentView, c'est plutôt le boulot d'une vue de capturer les événements.
NSWindow n'a pas vocation à afficher des données. C'est pourquoi JPImbert te conseille d'utiliser une NSView qui pourra changer l'affichage dans sa méthode -drawRect: en réponse à un événement.
Merci pour vos explications.