GTK的对话框(转)

http://hi.baidu.com/lammy/blog/item/99e3dda2baa9bca4cbefd0df.html

 

 

 

对话框是GUI系统跟用户交流的桥梁,是人机交互的重要手段;没有了对话框,就像人们不能用电一样,会给系统带来很多的不便。
       GTK的对话框数据结构如下:

typedef struct
{
GtkWidget *vbox;
GtkWidget *action_area;
} GtkDialog;

从它的结构体上来看,对话框的构建其实很简单,仅仅是预装了几个控件的窗体。说对话框是窗体,一点也不过分,因为对话框是用来弥补窗体top-level window在某些场合的不足。
       GtkDialog提供了两个成员,分别是vbox跟action_area(活动域),这两个区域之间有一条分隔线;活动域其实是一个水平的盒子,分隔线可以通过函数gtk_dialog_set_has_separator()人为的显示或隐藏。
       创建对话框有两个函数:

GtkWidget *gtk_dialog_new( void );

GtkWidget* gtk_dialog_new_with_buttons (const gchar *title,
GtkWindow *parent,
GtkDialogFlags flags,
const gchar *first_button_text,
...);

第一函数创建一个空白的没有任何信息的对话框,而第二个创建一个带button的对话框。当然对于第一个而言,我们可以通过如下方法添加buntton:

button = ...
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);

这里重点讲解下第二个函数gtk_dialog_new_with_buttons的参数,第一二两个参数分别表示对话框的标题和对话框的父窗体,第三个参数flags是个枚举类型,有三个类型:

• GTK_DIALOG_MODAL::强迫对话框为模式对话框,何为模式对话框,一会介绍
• GTK_DIALOG_DESTROY_WITH_PARENT:对话框的父窗体消失时,它也跟着结束,用这个属性来创建非模式对话框。
• GTK_DIALOG_NO_SEPARATOR: 隐藏vbox跟action_area(活动域)之间的分割线。

第四个及以后的参数是字符型的,它可以用stock ID 比如 GTK_STOCK_OK 或者用一个字符串来代替。
       当对话框组建好后,有一种显示对话框的方法是调用gtk_dialog_run(),因为它会调用gtk_widget_show_all();当对话框 发生某些动作时,比如按了某个button,它会返回一个独立id,我们可以根据id来判断对话框下一步动作。例如GtkDialog的说明文件中有这么 一段实例程序:

gint result = gtk_dialog_run (GTK_DIALOG (dialog));
switch (result)
{
case GTK_RESPONSE_ACCEPT:
do_application_specific_something ();
break;
default:
do_nothing_since_dialog_was_cancelled ();
break;
}
gtk_widget_destroy (dialog);

至此,当id返回时,你必须调用gtk_widget_destroy()结束对话框或者释放对话框的内存。
       模式对话框跟非模式对话框的区别:前者只要对话框存在,对话框的父窗体就不能响应任何外在的动作,后者是尽管对话框存在,但是不影响其父窗体对外部事件的响应 而在GTK中,当你调用了gtk_dialog_run()时,对话框总会设置成模式对话框,这可以从它实现源码得知。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值