创建一个应用软件的时候,你可能希望在窗口里放置超过一个以上的构件。我们的第一个 helloworld 示例仅用了一个构件,因此我们能够简单地使用 gtk_container_add()来“组装”这个构件到窗口中。但当你想要放置更多的构件到一个窗口中时,如何控制各个构件的定位呢?这时就要用到组装(Packing)了。
多数组装是通过创建一些“盒(boxes)”来达成的,这是些不可见的构件容器,它们有两种形式:一种是横向盒(horizontal box),一种是纵向盒(vertical box)。当我们组装构件到横向盒里时,这些构件就依着我们调用的顺序由左至右或从右到左水平地插入进去。在纵向盒里,则从顶部到底部或相反地组装构件,你可以使用任意的盒组合,比如盒套盒或者盒挨着盒,用以产生你想要的效果。
要创建一个新的横向盒我们调用 gtk_hbox_new(),对于纵向盒,用 gtk_vbox_new()。gtk_box_pack_start() 和 gtk_box_pack_end() 函数用来将对象组装到这些容器中。gtk_box_pack_start() 将对象从上到下组装到纵向盒中,或者从左到右组装到横向盒中。gtk_box_pack_end() 则相反,从下到上组装到纵向盒中,或者从右到左组装到横向盒中。使用这些函数允许我们调整自己的构件向左或向右对齐,同时也可以混入一些其它的方法来达到我们想要的设计效果。在我们的示例中多数使用 gtk_box_pack_start()。被组装的对象可以是另一个容器或构件。事实上,许多构件本身就是容器,包括按钮,只不过我们通常在按钮中只放入一个标签。
通过使用这些调用,GTK 就会知道要把构件放到哪里去,并且会自动做调整大小及其它美化的事情。至于如何组装你的构件这里还有一些选项。正如你能想到的,在放置和创建构件时,这些方法给了我们很多的弹性。