对话框元件非常简单,事实上它仅仅是一个预先封装了几个元件到里面的视窗。对话框的资料结构是:
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 則留言
Comments are closed.