|
GTK窗口布局管理控件常用到有兩個(gè)box和table。box即盒子,有水平和垂直之分,故box只能針對(duì)控件進(jìn)行一維空間布局,對(duì)二維空間來(lái)講,box顯得很笨重。
table即表,就是說(shuō)把控件的空間布局看作是一張表,很好到利用了平面坐標(biāo)的原理。其實(shí)它就是通過(guò)使用多個(gè)vbox和hbox來(lái)實(shí)現(xiàn)控件到排列。
box的創(chuàng)建方法:
vbox = gtk_vbox_new(TRUE, 1);上面程序中生成了GtkVBox。 我們把其中的第一個(gè)參數(shù)設(shè)置為 TRUE。這就意味著,程序中我的按鈕都為同樣的大小。至于按鈕之間的距離大小被設(shè)置為“1”象素。
settings = gtk_button_new_with_label("Settings");
gtk_box_pack_start(GTK_BOX(vbox), settings, TRUE, TRUE, 0);在上面的程序中我們把“settings “按鈕布局在vbox容器構(gòu)件中。 至于函數(shù)實(shí)參中的前兩個(gè)參數(shù),分別是容器構(gòu)件和我們要放置的子構(gòu)件。接下來(lái)的三個(gè)參數(shù)中分別是expand, fill和padding。 值得注意的是如果fill對(duì)應(yīng)的參數(shù)是FALSE,則按鈕就不會(huì)充滿整個(gè)vbox構(gòu)件。比較類似的是,如果之前在gtk_vbox_new(TRUE, 1);已經(jīng)設(shè)置按鈕都是等寬高了,所以expand對(duì)應(yīng)的參數(shù),是完全沒(méi)有效果的。(譯者注:此處建議fill expand都設(shè)為TRUE,至于具體區(qū)別和含義可在編程時(shí)感受)
table的創(chuàng)建方法:
pHtable = gtk_table_new(4, 3, TRUE)上面程序創(chuàng)建了一個(gè)4行3列的容器。
pHlable[0] = gtk_label_new("Test1");
pHlable[1] = gtk_label_new("Test2");
pHlable[2] = gtk_label_new("Test3");
pHlable[3] = gtk_label_new("Test4");
pHedit = gtk_entry_new();
gtk_table_attach(GTK_TABLE(pHtable),pHlable[0],0,1,0,1,GTK_EXPAND, GTK_EXPAND, 0, 0);
gtk_table_attach(GTK_TABLE(pHtable),pHlable[1],1,2,0,1,GTK_EXPAND, GTK_EXPAND, 0, 0);
gtk_table_attach(GTK_TABLE(pHtable),pHlable[2],2,3,0,1,GTK_EXPAND, GTK_EXPAND, 0, 0);
gtk_table_attach(GTK_TABLE(pHtable),pHlable[3],1,2,1,2,GTK_EXPAND, GTK_EXPAND, 0, 0);
gtk_table_attach(GTK_TABLE(pHtable),pHedit,2,3,2,3,GTK_EXPAND, GTK_EXPAND, 0, 0);上面的代碼創(chuàng)建了4個(gè)label和一個(gè)edit控件,并分別布局在如下圖所示到table中。
上面代碼的gtk_table_attach(GTK_TABLE(pHtable),pHlable[0],0,1,0,1,GTK_EXPAND, GTK_EXPAND, 0, 0)的第3到6個(gè)參數(shù)共4個(gè)參數(shù)分別表示控件在table中的左上角和右上角的橫坐標(biāo)以及左下角和左下角縱坐標(biāo)值。
0 1 2 3
0+----------+----------+----------+
| | | |
1+----------+----------+----------+
| | | |
2+----------+----------+----------+
| | | |
3+----------+----------+----------+
| | | |
4+----------+----------+----------+
|
|