Как создать окно какао программно?
мое приложение Cocoa нуждается в небольших динамически генерируемых окнах. Как я могу программно создать Cocoa windows во время выполнения?
Это моя нерабочая попытка до сих пор. Я не вижу никакого результата.
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 ответа:
проблема в том, что вы не хотите называть
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
- все, что подходит для вашей ситуации.
боковое Примечание, Если вы хотите программно создать экземпляр приложения без основного пера, в основном.m file / вы можете создать экземпляр AppDelegate, как показано ниже. Затем в ваших приложениях, поддерживающих файлы / YourApp.файл plist Main nib base file / MainWindow.xib удалить эту запись. Затем используйте подход Джейсона Коко, чтобы прикрепить окно в вашем методе инициализации AppDelegates.
#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];
появляется синее окно. Я надеюсь, что это оптимальный подход.