Ich habe versucht, die Win32-Funktionalität zu implementieren. MessageBox
unter Verwendung von GTK. Die Anwendung verwendet SDL/OpenGL, es handelt sich also nicht um eine GTK-Anwendung.
Ich kümmere mich um die Initialisierung ( gtk_init
) im Inneren des MessageBox
wie folgt funktionieren:
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;
}
Nun, ich bin keineswegs ein erfahrener GTK-Programmierer, und ich weiß, dass ich wahrscheinlich etwas schrecklich falsch mache.
Mein Problem ist jedoch, dass das letzte Dialogfeld mit dieser Funktion auftauchte, die bis zum Beenden des Prozesses bestehen bleibt. Irgendwelche Ideen?