對話框元件非常簡單,事實上它僅僅是一個預先封裝了幾個元件到裡面的視窗。對話框的資料結構是:
struct GtkDialog { GtkWindow window; GtkWidget *vbox; GtkWidget *action_area; }; |
從上面可以看到,對話框只是簡單地創建一個視窗,並在頂部封裝一個縱向盒(vbox),然後在這個縱向盒中封裝一個分隔線(separator),再加一個稱為「活動區(action_area)」的橫向盒(hbox).
對話框元件可以用於彈出訊息,或者其它類似的任務。這裡有兩個函式來創建一個新的對話框:
GtkWidget *gtk_dialog_new( void ); GtkWidget *gtk_dialog_new_with_buttons( const gchar *title, GtkWindow *parent, GtkDialogFlags flags, const gchar *first_button_text, ... ); |
第一個函式將創建一個空的對話框,你現在就可以使用它了。你可以封裝一個按鈕到它的活動區(action_area),就像下面這樣:
button = ... gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button, TRUE, TRUE, 0); gtk_widget_show (button); |
你可以通過封裝來擴充活動區,比如,增加一個標籤,可以像下面這樣做:
label = gtk_label_new ("Dialogs are groovy"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label, TRUE, TRUE, 0); gtk_widget_show (label); |
作為一個示例,可以在活動區裡面封裝兩個按鈕:一個「取消」按鈕和一個「確定」按鈕,再在縱向盒(vbox)裡封裝一個標籤,以便向用戶提出疑問,或顯示一個錯誤訊息等。然後可以把不同信號連接到每個按鈕,對用戶的選擇進行響應。
如果由對話框提供的縱向和橫向盒的簡單功能不能滿足你的需要,可以簡單地在封裝盒中添加其它佈局元件。例如,可以在縱向盒中添加一個封裝表格(table)。
更複雜的 gtk_dialog_new_with_buttons() 函式允許你設置下面的一個或多個參數。
- GTK_DIALOG_MODAL
- 使對話框使用獨佔模式。
- GTK_DIALOG_DESTROY_WITH_PARENTS
- 保證對話框在指定父視窗被關閉時也一起關閉。
- GTK_DIALOG_NO_SEPARATOR
- 省略縱向盒與活動區之間的分隔線
1 則留言