Tôi đã cố gắng triển khaicủa Win32 bằng GTK. Ứng dụng sử dụng SDL/OpenGL, vì vậy đây không phải là ứng dụng GTK.Triển khai GTK của MessageBox
tôi xử lý khởi động (gtk_init
) loại công cụ bên trong MessageBox
chức năng như sau:
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;
}
Bây giờ, tôi không phải là một lập trình viên GTK giàu kinh nghiệm, và tôi nhận ra rằng tôi đang làm điều gì đó có thể sai lầm khủng khiếp.
Tuy nhiên, sự cố của tôi là hộp thoại cuối cùng xuất hiện với chức năng này vẫn tồn tại cho đến khi quá trình thoát. Bất kỳ ý tưởng?