プログラマメモ2 - programmer no memo2

[objective-c]windowを表示してみる。その2 2008/11/12
2011/01/11

Objective-Cです。Cocoaです。
NSWindowを閉じるときにどうやってアプリケーションを終了させるのだろうと思いました。


NSWindowのdelegateを使って閉じるイベントをつかまえて、NSApplicationにterminateメッセージをおくってあげます。
NSApplicationは大域変数NSAppで参照可能。

#import <Cocoa/Cocoa.h>
@interface A:NSObject{
NSWindow *win;
}
-(void)go;
-(void)windowWillClose:(NSNotification *)notification;
- (void)windowDidMove:(NSNotification *)notification;
@end
@implementation A

- (void)go{
NSRect contrect;
contrect.size.width = 200;
contrect.size.height = 200;

NSUInteger wstyle = NSClosableWindowMask | NSTitledWindowMask;
win = [[NSWindow alloc] initWithContentRect:contrect styleMask:wstyle backing:NSBackingStoreBuffered defer:NO];
[win setReleasedWhenClosed:YES];
[win setDelegate:self];// DELEGATE
[win orderFront:nil];
}

- (void)windowWillClose:(NSNotification *)notification {
NSLog(@"windowWillClose!!");
[NSApp terminate:nil];
}
- (void)windowDidMove:(NSNotification *)notification {
NSLog(@"windowDidMove!!");
}
- (void)applicationDidFinishLaunching:(NSNotification*)notification {
NSLog(@"OK\n");
[self go];
}
@end

int main(int argc, const char *argv[]) {
id app = [NSApplication sharedApplication];
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
A *a = [A alloc];
[a autorelease];
[app setDelegate:a];
[app run];
return 0;
}

: