1 组装盒
1.1 创建盒
gtk_hbox_new 横向
gtk_vbox_new 纵向
/**
* homogeneous:是否均匀分配空间
* TRUE: 均匀分配空间,盒内所有控件按最大控件的大小分配
* FALSE: 建立不同大小的控件,以各自具有的内容分配
* spacing: 用来确定不同控件之间的间隙(注意是控件之间的间隙)
* **注意区分控件两端和控件之间**
*/
GtkWidget * gtk_hbox_new (gboolean homogeneous,
gint spacing);
注意看下面图片spacing = 20和padding = 10,可扩展可填充控件之间间隙的相同的,这是因为两个控件都会有padding,因此10 + 10 = 20。但是padding=10控件的两端都会10。然而spacing = 20只是控件之间。
1.2 盒子中放置控件
gtk_box_pack_start 从盒子最前面开始放控件
gtk_box_pack_end 从盒子最后开始放控件
/**
* expand:控制控件是否随着box拉长,控件是否也拉长
* fill: 只有expand是TRUE的情况下,此变量才其作用
* TRUE:控件随着box拉长后,是否填充空白区域
* FALSE:控件随着box拉长后,不填充空白区域
* padding:控件两端的间隙(像素)
*/
void gtk_box_pack_start (GtkBox *box,
GtkWidget *child,
gboolean expand,
gboolean fill,
guint padding);
fill
只有expand = TRUE
时候才起作用
2 表组装
columns = 2, rows = 2
0 1 2
0+----------+----------+
| | |
1+----------+----------+
| | |
2+----------+----------+
/**
* rows:列
* columns: 行
* homogeneous:决定表格如何定大小
* TRUE:平均分配大小,每个表格大小按最大控件的大小
* FALSE:则大小为,“高”为列中最高的物件,及“宽”为栏中最宽的控件大小
*/
GtkWidget* gtk_table_new (guint rows,
guint columns,
gboolean homogeneous);
/**
* left_attach、right_attach:x轴开始和结束坐标
* top_attach、bottom_attach:y轴开始和结束坐标
* xoptions、yoptions:指定x和y方向控件的是否扩展、填充属性
* GTK_FILL:如果table大于控件尺寸,该控件会扩展成使用所有可用空间
* GTK_EXPAND:如果table拉伸,控件是否跟着拉伸
* xpadding、xpadding:控件之间间隙
*/
void gtk_table_attach(GtkTable *table,
GtkWidget *child,
guint left_attach,
guint right_attach,
guint top_attach,
guint bottom_attach,
GtkAttachOptions xoptions,
GtkAttachOptions yoptions,
guint xpadding,
guint ypadding);
控件1(1, 2, 0,1) 控件2(1, 2, 1, 2)
如果控件1仅指定x方向FILL、控件2仅指定x方向EXPAND,但是由于控件2在x方向扩展,也会造成其他控件相同x方向扩展