2013-01-11 50 views
0

我有一個包含4個按鈕的gtk_window。
其中一個按鈕將打開一個文件選擇對話框(另一個功能),當文件被選中時,將顯示一個帶有3個gtk_entry(此功能)的對話框。
設置對話框不可調整大小或創建另一個gtk窗口

static void function_with_3_gtk_entry (gchar *message, gpointer mainwin){ 
    GtkWidget *dialog, *label, *content_area, *entry1, *entry2, *entry3; 
    /* Create the widgets */ 
    dialog = gtk_dialog_new_with_buttons ("Nome File", mainwin, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_NONE, NULL); 
    content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); 
    entry1 = gtk_entry_new(); 
    entry2 = gtk_entry_new(); 
    entry3 = gtk_entry_new(); 
    gtk_widget_set_size_request(dialog, 250, 200); 

    /* Ensure that the dialog box is destroyed when the user responds */ 
    g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog); 

    /* Add the label, and show everything we've added to the dialog */ 
    gtk_container_add (GTK_CONTAINER (content_area), entry1); 
    gtk_container_add (GTK_CONTAINER (content_area), entry2); 
    gtk_container_add (GTK_CONTAINER (content_area), entry3); 
    gtk_widget_show_all (dialog); 
} 

我的問題是:

  1. 我可以使用另一種GTK_WINDOW到這個函數,而不是一個gtk_dialog的?
  2. 我該如何設置對話框不可調整大小
+0

必須評論:不可調整大小的對話框是邪惡的,如果它們顯示*任何*動態文本或可編輯的文本字段或圖像。即使是單個文件名也可以是任意長的,翻譯和主題確定的圖像也是如此......如果值得展示對話框,值得添加處理大小調整的佈局。 – hyde

+0

是的,這是真的:-),你知道是否有可能在函數中有另一個'gtk_window'? – polslinux

回答

3

下面的代碼段有兩個功能:

  • create_dialog()創建不能調整大小,作爲所請求的對話。

  • create_window()根據請求在函數內創建一個窗口。

希望這會有所幫助。

#include <gtk/gtk.h> 


/* Create a dialog, which cannot be resized by the user. */ 

void create_dialog(GtkWidget *button, gpointer window) { 
    GtkWidget *dialog, *label, *content_area; 

    /* New label for dialog content */ 
    label = gtk_label_new("This is a dialog!"); 

    /* Make a new dialog with an 'OK' button */ 
    dialog = gtk_dialog_new_with_buttons("This is a dialog, which (shouldn't | can't) be resized!", window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_NONE, NULL); 

    /* Add label to dialog */ 
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); 
    gtk_container_add(GTK_CONTAINER(content_area), label); 

    /* Destroy dialog properly */ 
    g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog); 

    /* Set dialog to not resize. */ 
    gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); 

    gtk_widget_show_all(dialog); 
} 

/* Create a window, while in a function! */ 

void create_window(GtkWidget *button, gpointer window) { 
    GtkWidget *new_window, *label; 

    /*New label for dialog content */ 
    label = gtk_label_new("This is a window, created in a function!"); 

    /* Create new window */  
    new_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 

    /* Add label to window */ 
    gtk_container_add(GTK_CONTAINER(new_window), label); 

    gtk_widget_show_all(new_window); 
} 

/* Boring implementation bits */ 
gint main(gint argc, char **argv) { 

    /* Initialise GTK+ */ 
    gtk_init(&argc, &argv); 

    GtkWidget *main_win, *dialog_button, *window_button, *button_container; 

    /* Create a button, one for each function. */  
    dialog_button = gtk_button_new_with_label("Create dialog!");  
    window_button = gtk_button_new_with_label("Create window!"); 

    /* Pack buttons into a box. */ 
    button_container = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); 
    gtk_box_pack_start(GTK_BOX(button_container), dialog_button, FALSE, FALSE, 0); 
    gtk_box_pack_start(GTK_BOX(button_container), window_button, FALSE, FALSE, 0); 

    /* Connect signals to button callback functions */  
    g_signal_connect(dialog_button, "clicked", G_CALLBACK(create_dialog), main_win); 
    g_signal_connect(window_button, "clicked", G_CALLBACK(create_window), main_win); 

    /* Create a new window, show it, and run GTK+ */ 
    main_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    g_signal_connect(main_win, "destroy", G_CALLBACK(gtk_main_quit), NULL); 
    gtk_container_add(GTK_CONTAINER(main_win), button_container); 
    gtk_widget_show_all(main_win); 
    gtk_main(); 
    return 0; 
} 
+0

非常感謝! :)這真的幫助了我:D – polslinux

相關問題