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

这是我在Carbon教程中使用的代码。我直接从main()函数调用此函数,但我也尝试过在InstallEventLoopTimer()注册事件循环计时器后调用RunApplicationEventLoop(),以便在发生某种魔术时可以从那里调用以下代码您运行您的应用程序事件循环,该循环执行对话框正常工作所需的设置(巫毒!)。

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);

最佳答案

如果可执行文件未正确放在应用程序捆绑包中,则您不会收到事件。

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

关于c++ - RunStandardAlert永不返回,按钮无响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2925017/

10-10 23:53