Je suis en train de mettre en œuvre Win32 en MessageBox
utilisant GTK. L'application en utilisant SDL / OpenGL, ce n'est donc pas une application GTK.
Je gère l'initialisation ( gtk_init
) sorte de choses à l' intérieur de la MessageBox
fonction comme suit:
int MessageBox(HWND hwnd, const char* text, const char* caption, UINT type)
{
GtkWidget *window = NULL;
GtkWidget *dialog = NULL;
gtk_init(>kArgc, >kArgv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window), delete_event, G_CALLBACK(delete_event), NULL);
g_signal_connect(G_OBJECT(window), destroy, G_CALLBACK(destroy), NULL);
// gcallback calls gtk_main_quit()
gtk_init_add((GtkFunction)gcallback, NULL);
if (type & MB_YESNO) {
dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, text);
} else {
dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, text);
}
gtk_window_set_title(GTK_WINDOW(dialog), caption);
gint result = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_main();
gtk_widget_destroy(dialog);
if (type & MB_YESNO) {
switch (result) {
default:
case GTK_RESPONSE_DELETE_EVENT:
case GTK_RESPONSE_NO:
return IDNO;
break;
case GTK_RESPONSE_YES:
return IDYES;
break;
}
}
return IDOK;
}
Maintenant, je suis pas un programmeur expérimenté GTK, et je me rends compte que je fais probablement quelque chose horriblement mal.
Cependant, mon problème est que la dernière boîte de dialogue surgit avec cette fonction reste autour jusqu'à ce que le processus se termine. Des idées?