71

私の 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];
4

5 に答える 5

147

問題は、ウィンドウをキー ウィンドウにするかどうかに応じて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

于 2008-11-24T14:39:58.063 に答える
43

補足として、メイン 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;
}
于 2011-05-12T01:59:24.187 に答える
7

試す

[window makeKeyAndOrderFront:self]; 

それ以外の

[window display];

それがあなたの目指すものですか?

于 2008-11-24T14:39:33.617 に答える
2

これは私が思いついたものです:

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];

これにより、青いウィンドウが表示されます。これが最適なアプローチであることを願っています。

于 2008-11-24T14:38:57.860 に答える