RunStandardAlert永远不会返回,按钮无响应

时间:2010-05-27 21:19:32

标签: c++ macos dialog macos-carbon alert

我正在尝试从一个非常简单的应用程序中创建一个简单的对话框。它是应用程序中唯一的UI。但是当我调用RunStandardAlert时,按钮是无响应的,函数调用永远不会返回。我没有在应用程序的任何其他地方使用Carbon或Cocoa。

这是我正在使用的代码,来自Carbon教程。我直接从我的main()函数调用它,但我也尝试在使用InstallEventLoopTimer()注册一个事件循环计时器之后调用RunApplicationEventLoop()所以我可以从那里调用下面的代码以防万一有一些魔法在进行时你运行你的应用程序事件循环,它执行对话框工作所需的设置(voodoo!)。

DialogRef theItem;
DialogItemIndex itemIndex;
CreateStandardAlert(kAlertStopAlert, CFSTR("Oh dear, the penguin’s disappeared."),
CFSTR("I hope you weren’t planning to open source him."), NULL, &theItem);
RunStandardAlert (theItem, NULL, &itemIndex);

1 个答案:

答案 0 :(得分:1)

如果可执行文件不在应用程序包中,则无法收到事件。

foo.c的

#include <Carbon/Carbon.h>

int main(){
    DialogRef theItem;
    DialogItemIndex itemIndex;
    CreateStandardAlert(kAlertStopAlert, CFSTR("Oh dear, the penguin’s disappeared."),
    CFSTR("I hope you weren’t planning to open source him."), NULL, &theItem);
    RunStandardAlert (theItem, NULL, &itemIndex);
    return 0;
}

然后通过

编译它
$ gcc foo.c -o foo -framework Carbon

现在你需要创建一个目录

foo.app
foo.app/Contents
foo.app/Contents/MacOS

然后将二进制foo放入

foo.app/Contents/MacOS/foo

现在你可以打电话

$ open foo.app

$ foo.app/Contents/MacOS/foo

请参阅Bundle Programming Guide