Как создать окно какао программно?
мое приложение 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];появляется синее окно. Я надеюсь, что это оптимальный подход.