obj-cでGUIウィンドウを作成する方法はありますが、.appバンドルはなく、単にextcutableですか? 問題は、GUI アプリケーション (ダイアログが 1 つだけ) が必要なことです。
私が試した:appkit.frameworkを端末アプリにインポートします。- たくさんの理由でクラッシュします。OS X 10.8には含まれていないため、x11を使用することはお勧めできません。
それで、何かアイデアはありますか?
obj-cでGUIウィンドウを作成する方法はありますが、.appバンドルはなく、単にextcutableですか? 問題は、GUI アプリケーション (ダイアログが 1 つだけ) が必要なことです。
私が試した:appkit.frameworkを端末アプリにインポートします。- たくさんの理由でクラッシュします。OS X 10.8には含まれていないため、x11を使用することはお勧めできません。
それで、何かアイデアはありますか?
残念ながら、NSApplication を実行する必要がありますが、アプリ バンドルは必要ありません。
プロジェクトを作成するときは、必ず「Foundation」をタイプとして選択してください。次に、次のように設定できます。
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
@interface MyAppDelegate : NSObject <NSApplicationDelegate>
{
NSWindow *window;
}
@end
@implementation MyAppDelegate
-(id) init
{
self = [super init];
if (self)
{
// total *main* screen frame size //
NSRect mainDisplayRect = [[NSScreen mainScreen] frame];
// calculate the window rect to be half the display and be centered //
NSRect windowRect = NSMakeRect(mainDisplayRect.origin.x + (mainDisplayRect.size.width) * 0.25,
mainDisplayRect.origin.y + (mainDisplayRect.size.height) * 0.25,
mainDisplayRect.size.width * 0.5,
mainDisplayRect.size.height * 0.5);
/*
Pick your window style:
NSBorderlessWindowMask
NSTitledWindowMask
NSClosableWindowMask
NSMiniaturizableWindowMask
NSResizableWindowMask
*/
NSUInteger windowStyle = NSTitledWindowMask | NSMiniaturizableWindowMask;
// set the window level to be on top of everything else //
NSInteger windowLevel = NSMainMenuWindowLevel + 1;
// initialize the window and its properties // just examples of properties that can be changed //
window = [[NSWindow alloc] initWithContentRect:windowRect styleMask:windowStyle backing:NSBackingStoreBuffered defer:NO];
[window setLevel:windowLevel];
[window setOpaque:YES];
[window setHasShadow:YES];
[window setPreferredBackingLocation:NSWindowBackingLocationVideoMemory];
[window setHidesOnDeactivate:NO];
[window setBackgroundColor:[NSColor greenColor]];
}
return self;
}
- (void)applicationWillFinishLaunching:(NSNotification *)notification
{
// make the window visible when the app is about to finish launching //
[window makeKeyAndOrderFront:self];
/* do layout and cool stuff here */
}
- (void)applicationDidFinishLaunching:(NSNotification*)aNotification
{
/* initialize your code stuff here */
}
- (void)dealloc
{
// release your window and other stuff //
[window release];
[super dealloc];
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool
{
NSApplication *app = [NSApplication sharedApplication];
[app setDelegate:[[[MyAppDelegate alloc] init] autorelease]];
[app run];
}
return 0;
}
行 [app run]; に注意してください。ブロックしているため、ロジックをアプリケーション ループ内または新しいスレッドで実行する必要があります (アプリケーション ループを推奨)。
それが役に立てば幸い。
編集:ブー..私は遅すぎました!