Cocoaアプリには、動的に生成される小さなウィンドウが必要です。実行時にプログラムでCocoaウィンドウを作成するにはどうすればよいですか?
これはこれまでのところ私の非動作の試みです。結果がまったく表示されません。
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
を使用する必要があります。
このコードは、画面の左下にボーダーレスの青いウィンドウを作成します。
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
の送信者は、状況に応じて適切に作成できます。
補足事項として、メインnibなしでアプリケーションをプログラムでインスタンス化する場合は、main.mファイルで、次のようにAppDelegateをインスタンス化できます。次に、アプリのSupporting Files/YourApp.plist Main nib base file/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];
これにより、青いウィンドウが表示されます。これが最適なアプローチであることを願っています。