由於存在這樣的彈性,所以在一開始使用 GTK 中的封裝盒(packing box)的時候會有點讓人迷惑。這裡有許多選項,並且它們不容易一眼看出是如何組合在一起的。然而到最後,這裡基本上只有五種不同的風格。
每一行包含一個帶有若干按鈕的橫向盒。gtk_box_pack 是封裝每個按鈕到橫向盒(hbox)的簡寫。每個按鈕都是以同樣的方式封裝到橫向盒裡的(例如,以同樣參數呼叫 gtk_box_pack_start() 函式)。
這是 gtk_box_pack_start() 函式的宣告。
void gtk_box_pack_start( GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, guint padding ); |
第一個參數是你要把物件封裝進去的盒,第二個就是該物件。目前這些物件將都是按鈕,即我們要將這些按鈕封裝到盒中。
gtk_box_pack_start() 和 gtk_box_pack_end() 中的 expand 參數是用來控制元件在盒中如何佈置,是要充滿所有額外的空間這樣盒會均勻分配在給它的空間中(TURE);或是盒收縮到僅僅符合元件的大小(FALSE)。設置 expand 為 FALSE 將允許你向左或向右對齊你的元件。否則,它們會在盒中展開,同樣的效果用 gkt_box_pack_start() 或 gtk_box_pack_end() 都可以實現。
fill 參數在 gtk_box_pack 中控制額外空間是如何分配給物件本身(TRUE),還是讓額外空間圍繞在這些物件周圍分佈(FALSE)。它只有在 expand 參數也為 TRUE 時才會生效。
當創建一個新盒時,函式看起來像下面這樣:
GtkWidget *gtk_hbox_new ( gboolean homogeneous, gint spacing ); |
gtk_hbox_new() 的 homogeneous 參數(對於gtk_vbox_new()也是一樣)控制是否盒裡的每個物件具有相同的大小(例如,在橫向盒中等寬,或在縱向盒中等高)。若它被設置,gtk_box_pack()常式的expand參數就被忽略了,它本質上總被開啟。
spacing(當盒被創建時設置)和 padding(當元素被封裝時設置)有什麼區別呢?Spacing 是加在物件之間,而 papadding 加在物件的每一邊。看下面這張圖應該會明白一點:
這面是產生上面這些圖片的代碼,其中做了不少註釋,所以我希望你看下去不會有任何問題。自己編譯它並玩玩它吧。
封裝示範程式 »
1 則留言