2017-11-26 2 views
1

Ich habe viele Fragen gesehen, aber ich konnte nichts finden, was mir geholfen hat. Ich habe mir viele Apple-Entwicklerseiten angesehen, aber ich finde diese etwas unklar.Hinzufügen von Ereignissen zu NSWindow mit Cocoa und Objective-C++

Ich möchte Anwendungen in Objective-C++ ohne Xcode oder andere IDE machen, die die ganze Arbeit für mich erledigt. Meine IDE ist Atom, und ich kompiliere mit g ++. Ich habe die folgende Klasse ein Fenster zu erstellen:

//Window.mm 
#ifndef WINDOW_H 
#define WINDOW_H 

#import "Cocoa/Cocoa.h" 

class Window 
{ 
    private: NSWindow* window; 

    public: Window(const char* title, int x, int y, int w, int h, NSColor* bg = [NSColor colorWithCalibratedRed:0.3f green:0.3f blue:0.3f alpha:1.0f]) 
    { 
     NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
     [NSApplication sharedApplication]; 

     NSRect frame = NSMakeRect(x, y, w, h); 
     NSUInteger windowStyle = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable; 
     NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:windowStyle]; 

     this->window = [[[NSWindow alloc] initWithContentRect:rect styleMask:windowStyle backing:NSBackingStoreBuffered defer:NO] autorelease]; 
     [this->window makeKeyAndOrderFront: this->window]; 
     [this->window setBackgroundColor: bg]; 
     [this->window setTitle: [NSString stringWithUTF8String:title]]; 
     [this->window orderFrontRegardless]; 

     [pool drain]; 
     [NSApp run]; 
    } 
}; 
#endif 

Von dem, was ich verstanden habe ist, dass ich etwas mit einem NSView tun müssen, aber ich bin mir nicht sicher, was ich tun soll. Wie kann ich Schlüsseleingabe von meinem Fenster erhalten?

Antwort

1

Sie benötigen NSWindow, um eine Unterklasse Tasteneingabeereignisse zu empfangen, zum Beispiel:

KWCustomWindow.h:

#import <Cocoa/Cocoa.h> 

@interface KWCustomWindow : NSWindow 

@end 

KWCustomWindow.m

#import "KWCustomWindow.h" 

@implementation KWCustomWindow 

- (void)keyDown:(NSEvent *)event 
{ 
    NSLog(@"Key Down"); 
} 

@end 
Verwandte Themen