对话框 Dialogs

对话控件非常简单,事实上它仅仅是一个预先添加了几个控件到里面的窗口。

对话框的数据结构是:

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)里添加一个标签,以便向用户提出疑问,或显示一个错误信息等。然后可以把不同信号绑定到每个按钮,对用户的选择进行响应。

如果由对话框提供的纵向和横向盒的简单功能不能满足你的需要,可以简单地在box控件容器中添加其它布局控件。例如,可以在纵向盒中添加一个表(table)控件。

更复杂的 gtk_dialog_new_with_buttons() 函数允许你设置下面的一个或多个参数。

  • GTK_DIALOG_MODAL
    使对话框使用独占模式。
  • GTK_DIALOG_DESTROY_WITH_PARENTS
    保证对话框在指定父窗口被关闭时也一起关闭。
  • GTK_DIALOG_NO_SEPARATOR
    省略纵向盒与活动区之间的分隔线