使用 Cocoa 和 Objective-C++ 向 NSWindow 添加事件
Adding events to NSWindow using Cocoa and Objective-C++
我看到了很多问题,但找不到任何对我有帮助的问题。我看过许多 Apple 开发人员页面,但我发现这些页面有点不清楚。
我想在 Objective-C++ 中创建应用程序,而没有 Xcode 或任何其他为我完成所有工作的 IDE。我的IDE是Atom,用g++编译。我有以下 class 来创建 window:
//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
据我所知,我需要用 NSView 做一些事情,但我不确定我应该做什么。我怎样才能从我的 window 获得按键输入?
您需要子类化 NSWindow 才能接收按键输入事件,例如:
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
我看到了很多问题,但找不到任何对我有帮助的问题。我看过许多 Apple 开发人员页面,但我发现这些页面有点不清楚。
我想在 Objective-C++ 中创建应用程序,而没有 Xcode 或任何其他为我完成所有工作的 IDE。我的IDE是Atom,用g++编译。我有以下 class 来创建 window:
//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
据我所知,我需要用 NSView 做一些事情,但我不确定我应该做什么。我怎样才能从我的 window 获得按键输入?
您需要子类化 NSWindow 才能接收按键输入事件,例如:
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