/ / Aggiunta di eventi a NSWindow utilizzando Cocoa e Objective-C ++ - obiettivo-c, cacao, nswindow, obiettivo-c ++

Aggiunta di eventi a NSWindow utilizzando Cocoa e Objective-C ++ - obiettivo-c, cacao, nswindow, obiettivo-c ++

Ho visto un sacco di domande, ma non ho trovato nulla che mi abbia aiutato. Ho esaminato molte pagine degli sviluppatori Apple, ma le trovo poco chiare.

Voglio fare applicazioni in Objective-C ++ senza Xcode o qualsiasi altro IDE che faccia tutto il lavoro per me. Il mio IDE è Atom e mi compilo con g ++. Ho la seguente classe per creare una finestra:

//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

Da quello che ho capito è che ho bisogno di fare qualcosa con un NSView, ma non sono sicuro di cosa dovrei fare. Come sarò in grado di ottenere input chiave dalla mia finestra?

risposte:

1 per risposta № 1

È necessario sottoclasse NSWindow per ricevere eventi di input chiave, ad esempio:

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