GTK Gossip: GtkFrame 與 GtkButtonBox

來源:互聯網
上載者:User
GtkFrame也是GtkContainer的子類,可以容納其它Widget,並呈現出以下的外觀(圖片取自 GtkFrame 檔案
):


要建立GtkFrame,並將元件置於其中,基本上是如下的程式碼片段:

GtkWidget *gtkFrame = gtk_frame_new("GtkHButtonBox");



gtk_container_add(GTK_CONTAINER(gtkFrame), hbuttonBox);


GtkButtonBox則是一個可以容納按鈕群組的不可視版面配置元件,您可以使用gtk_hbutton_box_new()函式建立一個水平置放按
鈕的GtkButtonBox,或是使用gtk_vbutton_box_new()建立一個垂直建立按鈕的GtkButtonBox,在建立
GtkButtonBox之後,您可以使用gtk_button_box_set_layout()來設置按鈕的相片順序,依給定的
GtkButtonBoxStyle進行設定:

typedef enum


{


  GTK_BUTTONBOX_DEFAULT_STYLE,


  GTK_BUTTONBOX_SPREAD,


  GTK_BUTTONBOX_EDGE,


  GTK_BUTTONBOX_START,


  GTK_BUTTONBOX_END,


  GTK_BUTTONBOX_CENTER


} GtkButtonBoxStyle;


下面的程式碼使用了GtkBox、GtkButtonBox及GtkFrame進行了較複雜的版面配置,要注意的是元件加入的順序,以及設定不同GtkButtonBoxStyle後的呈現方式:

  • layout_demo.c
#include <gtk/gtk.h>

// 建立水平按鈕群組
GtkWidget* createHButtonBoxWithFrame() {
int i;
GtkWidget *hbuttonBox = gtk_hbutton_box_new();
GtkWidget *gtkFrame = gtk_frame_new("GtkHButtonBox");
gtk_container_add(GTK_CONTAINER(gtkFrame), hbuttonBox);

gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonBox),
GTK_BUTTONBOX_SPREAD);
for(i = 0; i < 4; i++) {
gtk_box_pack_start(GTK_BOX(hbuttonBox),
gtk_button_new_with_label("HBtn"), TRUE, TRUE, 5);
}

return gtkFrame;
}

// 建立垂直按鈕群組
GtkWidget* createVButtonBoxWithFrame() {
int i;
GtkWidget *vbuttonBox = gtk_vbutton_box_new();
GtkWidget *gtkFrame = gtk_frame_new("GtkVButtonBox");
gtk_container_add(GTK_CONTAINER(gtkFrame), vbuttonBox);

gtk_button_box_set_layout(GTK_BUTTON_BOX(vbuttonBox),
GTK_BUTTONBOX_START);
for(i = 0; i < 4; i++) {
gtk_box_pack_start(GTK_BOX(vbuttonBox),
gtk_button_new_with_label("VBtn"), TRUE, TRUE, 5);
}

return gtkFrame;
}

int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *gtkFrame1, *gtkFrame2;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GtkFrame & GtkButtonBox");
gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);

// 最外層為GtkFrame,當中包括GtkVBox
vbox = gtk_vbox_new(TRUE, 5);
gtkFrame1 = gtk_frame_new("GtkVBox");
gtk_container_add(GTK_CONTAINER(gtkFrame1), vbox);

// 建立水平按鈕群組,加入GtkVBox
gtk_box_pack_start(GTK_BOX(vbox),
createHButtonBoxWithFrame(), TRUE, TRUE, 5);

// 建立GtkFrame,當中包括GtkHBox,加入GtkVBox中
hbox = gtk_hbox_new(TRUE, 5);
gtkFrame2 = gtk_frame_new("GtkHBox");
gtk_container_add(GTK_CONTAINER(gtkFrame2), hbox);
gtk_box_pack_start(GTK_BOX(vbox), gtkFrame2, TRUE, TRUE, 5);

// 分別建立兩個垂直按鈕群組,加入GtkHBox中
gtk_box_pack_start(GTK_BOX(hbox),
createVButtonBoxWithFrame(), TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(hbox),
createVButtonBoxWithFrame(), TRUE, TRUE, 5);

gtk_container_add(GTK_CONTAINER(window), gtkFrame1);

g_signal_connect(GTK_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show_all(window);

gtk_main();

return 0;
}

執行的成果如下所示:




 


 


BloggerAds 廣告
羅技找出你筆電的好麻吉!
搭配出最COOL的筆電體驗,並與你的好友們分享,就有機會獲得豐富大獎喔!
更多訊息..
踏步機變革 | 企鵝機現身
室內運動不再無聊,讓健身教練帶領你進行踏步機【有氧課程】,大汗淋漓顛覆您對踏步機的一貫想法!
更多訊息..
Impr


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.