2011-12-30 51 views
3

我做了一个简单的实验中,NSWindow,我写在Xcode下面的代码:下创建C++

int main(int argc, char** argv) 
{ 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
    NSApplication* app = [[NSApplication alloc] init]; 
    NSWindow* window = [[NSWindow alloc] 
     initWithContentRect: NSMakeRect(0, 0, 640, 480) 
     styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask 
     backing: NSBackingStoreBuffered 
     defer: NO]; 
    [window setTitle: @"New Window"]; 
    [window center]; 
    [window makeKeyAndOrderFront:nil]; 
    [app run]; 
    [pool release]; 
    return 0; 
} 

它运行如预期,新的空窗在那里,但如果我编译它在具有命令端子line:

$ g++ test.mm -framework Cocoa 
$ ./a.out 

在没有窗口的情况下,[app run]会变得轻而易举。

我做错了吗?为什么它在Xcode和命令行之间有不同的行为?有人可以告诉我如何在命令行中实现相同的行为吗?

在此先感谢。

回答

5

把你的代码和编译它在10.7.2机器上工作正常...窗口出现(虽然在我的终端窗口后面,并没有显示为正在运行的应用程序)。

如果您希望让应用程序显示为在Dock中运行的进程,则必须将其正确打包到.app包中。如果你做到以下几点:

g++ test.mm -framework Cocoa 
mkdir -p cli.app/Contents/MacOS 
cp a.out cli.app/Contents/MacOS/cli 

,然后在命令行中运行cli.app/Contents/MacOS/cli,你的过程中会显示为一个运行的应用程序。

+0

酷,它的工作原理,谢谢,我会读更多关于在苹果的开发库中的捆绑软件。 – 2011-12-30 23:57:41

+0

很酷,谢谢!但出于某种原因,我的窗口无法选择(使用鼠标) - 它始终保持灰显状态。对此有何想法? – peetonn 2013-10-30 20:30:32