天天看點

NSWindow 通知/關閉/退出app

代碼示例

NSRect frame = CGRectMake(0, 0, 200, 200);
NSUInteger style =  NSTitledWindowMask | NSClosableWindowMask |NSMiniaturizableWindowMask | NSResizableWindowMask;
NSWindow *window = [NSWindow alloc]initWithContentRect:frame styleMask:style backing:NSBackingStoreBuffered defer:YES];
window.title = @"New Create Window";
//視窗顯示
[window makeKeyAndOrderFront:self];
//視窗居中
[window center];”
           

styleMask:視窗風格

enum {
   NSBorderlessWindowMask = 0,             //沒有頂部titlebar邊框
   NSTitledWindowMask = 1 << 0,            //有頂部titlebar邊框
   NSClosableWindowMask = 1 << 1,          //帶有關閉按鈕
   NSMiniaturizableWindowMask = 1 << 2,    //帶有最小化按鈕
   NSResizableWindowMask = 1 << 3,         //恢複按鈕
   NSTexturedBackgroundWindowMask = 1 << 8 //帶紋理背景的window
};
           

backing:視窗繪制的緩存模式

enum {
   NSBackingStoreRetained     = 0, //相容老系統參數,基本很少用到
   NSBackingStoreNonretained  = 1, //不緩存直接繪制
   NSBackingStoreBuffered     = 2  //緩存繪制
};
           

視窗通知

NSWindowDidBecomeKeyNotification: 視窗成為keyWindow
NSWindowDidBecomeMainNotification:視窗成為mainWindow
NSWindowDidMoveNotification:      視窗移動
NSWindowDidResignKeyNotification: 視窗不再是keyWindow
NSWindowDidResignMainNotification:視窗不再是mainWindow
NSWindowDidResizeNotification:    視窗大小改變
NSWindowWillCloseNotification:    關閉視窗
           

NSWindow 中的 contentView

關閉視窗時退出程式

方法一:
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)application {
    return YES;
}
           
方法二:利用 NSWindowDelegate
- (void)windowWillClose:(NSNotification *)notification
{
    NSWindow *window = notification.object;
    if(window == self.window) {
        [NSApp terminate:self];
       // [[NSApplication sharedApplication] terminate:nil];  //或這句也行
    }
}
           

設定Window的image和title

- (void)setWindowIcon {
    [self.window setRepresentedURL:[NSURL URLWithString:@"WindowTitle"]];
    [self.window setTitle:@"SQLiteApp"];
    NSImage *image = [NSImage imageNamed:@"windowIcon"];
    [[self.window standardWindowButton:NSWindowDocumentIconButton] setImage:image];
}
           

**關閉視窗**

[self.window miniaturize:sender];

繼續閱讀