2010-05-27 3 views
0

J'essaie de créer une boîte de dialogue simple à partir d'une application très simple. C'est la seule interface utilisateur de l'application. Mais quand j'appelle RunStandardAlert, les boutons ne répondent pas, et l'appel de fonction ne retourne jamais. Je n'utilise pas de carbone ou de cacao ailleurs dans l'application.RunStandardAlert ne revient jamais, les boutons sont non-réactifs

C'est le code que j'utilise, tiré du tutoriel Carbon. J'appelle ceci directement de ma fonction main(), mais j'ai aussi essayé d'appeler RunApplicationEventLoop() après avoir enregistré un timer de boucle d'événements avec InstallEventLoopTimer() pour pouvoir appeler le code ci-dessous au cas où il y aurait de la magie vous exécutez votre boucle d'événement d'application qui fait l'installation nécessaire pour que les boîtes de dialogue fonctionnent (vaudou!).

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

Répondre

1

Vous ne pouvez pas recevoir d'événement si l'exécutable ne se trouve pas dans un ensemble d'applications correctement.

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

Ensuite, vous compilez par

$ gcc foo.c -o foo -framework Carbon 

Maintenant, vous devez créer un répertoire

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

puis mettre le foo binaire dans

foo.app/Contents/MacOS/foo 

Maintenant, vous pouvez soit appeler

$ open foo.app 

ou

$ foo.app/Contents/MacOS/foo 

Voir Bundle Programming Guide.

Questions connexes