от
Я пытаюсь реализовать
MessageBox
Win32 с использованием ГТК. Приложение, используя SDL/OpenGL, так что это не приложение ГТК. Я занимаюсь инициализации (
gtk_init
) рода вещи внутри функции
MessageBox
следующим образом:
int MessageBox(HWND hwnd, const char* text, const char* caption, UINT type)
{
    GtkWidget *window = NULL;
    GtkWidget *dialog = NULL;

    gtk_init(

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

4 Ответы

0 голосов
от
Я пытаюсь реализовать
MessageBox
Win32 с использованием ГТК. Приложение, используя SDL/OpenGL, так что это не приложение ГТК. Я занимаюсь инициализации (
gtk_init
) рода вещи внутри функции
MessageBox
следующим образом:
int MessageBox(HWND hwnd, const char* text, const char* caption, UINT type)
{
    GtkWidget *window = NULL;
    GtkWidget *dialog = NULL;

    gtk_init(
0 голосов
от
Хм, ОК. Я бы предложил такой код, то:
typedef struct {
    int type;
    int result;
} DialogData;

static gboolean
display_dialog(gpointer user_data)
{
    DialogData *dialog_data = user_data;
    GtkWidget *dialog;

    if (dialog_data

Структуры, потому что вам нужно пройти всего пару штук данных. В gtk_idle_add()
вызов добавляет метод должен быть запущен после завершения цикла запуска и холостого хода, а
FALSE
возвращаемое значение от вызова
display_dialog()
означает, что это выполняется только один раз. После того как мы получим результат в диалоговом окне, мы выходим из главного цикла. Чему
gtk_main()
в основной способ
MessageBox()
для возвращения, и вы сможете получить доступ к результатом оттуда. Надеюсь, что это помогает!
0 голосов
от
Для управления в диалоговом окне с GTK , использовать GtkDialog и gtk_dialog_run() вместо того, чтобы управлять окном и основной цикл самостоятельно. РЕДАКТИРОВАНИЕ / ДОБАВЛЕНИЕ : Я имею в виду "просто использовать" : я не понимаю, почему вы создаете окна вы никогда не используете и основной цикл, который кажется бесполезным (по крайней мере из куска кода, который вы выложили). Вы можете написать что-нибудь как можно короче :
int MessageBox(HWND hwnd, const char* text, const char* caption, UINT type)
{
    GtkWidget *dialog ;

    /* Instead of 0, use GTK_DIALOG_MODAL to get a modal dialog box */

    if (type
0 голосов
от
Несколько вещей: Вы создаете (и не использую) ненужное окно верхнего уровня, названный
window
. Вы можете просто удалить эти строчки:
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);
Кроме того, поток, кажется, не совсем правильно.
gtk_main()
начинается основной цикл ГТК, который блокирует пока что-то не выходит он.
gtk_dialog_run()
также запускает основной цикл, но он выходит, как только одна из кнопок нажата. Я думаю, что это может быть достаточно для вас, чтобы удалить
gtk_init_add()
и
gtk_main()
звонки, и просто разобраться с возвращаемым значением. Также
gtk_widget_destroy()
звонить ненужно, так как диалоговое окно автоматически уничтожается, когда gtk_dialog_run() возвращает.
...