如何以编程方式创build一个Cocoa窗口?
我的cocoa应用程序需要一些小的dynamic生成的窗口。 我怎样才能在运行时编程创buildcocoa窗口?
这是我迄今为止的非工作尝试。 我看不出任何结果。
NSRect frame = NSMakeRect(0, 0, 200, 200); NSUInteger styleMask = NSBorderlessWindowMask; NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask]; NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreRetained defer:false]; [window setBackgroundColor:[NSColor blueColor]]; [window display];
问题是你不想调用display ,你想调用makeKeyAndOrderFront或者orderFront,这取决于你是否希望窗口成为关键窗口。 你也应该使用NSBackingStoreBuffered。
此代码将在屏幕左下angular创build无边界蓝色窗口:
NSRect frame = NSMakeRect(0, 0, 200, 200); NSWindow* window = [[[NSWindow alloc] initWithContentRect:frame styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO] autorelease]; [window setBackgroundColor:[NSColor blueColor]]; [window makeKeyAndOrderFront:NSApp]; //Don't forget to assign window to a strong/retaining property! //Under ARC, not doing so will cause it to disappear immediately; // without ARC, the window will be leaked.
您可以为makeKeyAndOrderFront或orderFront创build发件人,适合您的情况。
一个侧面说明,如果你想编程实例化应用程序没有主要的笔尖,在main.m文件/你可以实例化AppDelegate如下。 然后在您的应用程序支持文件/ YourApp.plist 主笔尖基本文件/ MainWindow.xib删除此条目。 然后使用Jason Coco的方法在AppDelegates init方法中附加窗口。
#import "AppDelegate.h": int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; [NSApplication sharedApplication]; AppDelegate *appDelegate = [[AppDelegate alloc] init]; [NSApp setDelegate:appDelegate]; [NSApp run]; [pool release]; return 0; }
尝试
[window makeKeyAndOrderFront:self];
代替
[window display];
这是你的目标?
这是我自己提出的:
NSRect frame = NSMakeRect(100, 100, 200, 200); NSUInteger styleMask = NSBorderlessWindowMask; NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask]; NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreBuffered defer:false]; [window setBackgroundColor:[NSColor blueColor]]; [window makeKeyAndOrderFront: window];
这显示一个蓝色的窗口。 我希望这是最佳的方法。