//源码文件SimpleHLayout.c
#include <gtk/gtk.h>
GtkWidget *wnd;//窗口构件
GtkWidget *hbox;//水平盒装容器构件
GtkWidget *btn1,*btn2,*btn3;//三个按钮构件
void ui_init()
{
//创建窗口
wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//设置窗口的标题栏文字
gtk_window_set_title(GTK_WINDOW(wnd),"Simple HLayout");
//设置窗口出现的位置
gtk_window_set_position(GTK_WINDOW(wnd),GTK_WIN_POS_CENTER);
//创建一个不平均分配区域的水平盒装容器
hbox = gtk_hbox_new(FALSE,2);
//hbox = gtk_hbox_new(TRUE,2);
//创建btn1,btn2,btn3三个按钮构件
btn1 = gtk_button_new_with_label("button1");
btn2 = gtk_button_new_with_label("button2button2button2");
btn3 = gtk_button_new_with_label("button3button3");
//将三个按钮构件按照不同的方式放置在hbox容器中
gtk_box_pack_start(GTK_BOX(hbox),btn1,FALSE,TRUE,2);
//gtk_box_pack_start(GTK_BOX(hbox),btn1,TRUE,TRUE,2);
gtk_box_pack_start(GTK_BOX(hbox),btn2,TRUE,TRUE,2);
gtk_box_pacl_start(GTK_BOX(hbox),btn3,TRUE,FALSE,2);
//将hbox容器放在窗口中
gtk_container_add(GTK_CONTAINER(wnd),hbox);
//显示窗口中的所有构件
gtk_widget_show_all(wnd);
}
int main(int argc,char *argv[])
{
gtk_init();
ui_init();
g_signal_connect(G_OBJECT(wnd),"destroy",G_CALLBACK(gtk_main_quit),NULL);
gtk_main();
return 0;
}
源代码中下面这两句注释的代码,可以替换相对应的代码,编译后查看窗口有些什么变化
//hbox = gtk_hbox_new(TRUE,2);
//gtk_box_pack_start(GTK_BOX(hbox),btn1,TRUE,TRUE,2);
//编译文件makefile
CC=gcc
OFLAG=-o
GFLAG=-g
GTK=`pkg-config --cflags --libs gtk+-2.0`
FILENAME=SimpleHLayout
CFILENAME=SimpleHLayout.c
DEBUGFILENAME=SimpleHLayout.debug
$(FILENAME):$(CFILENAME)
$(CC) $(OFLAG) $(FILENAME) $(CFILENAME) $(GTK)
$(CC) $(OFLAG) $(DEBUGFILENAME) $(CFILENAME) $(GFLAG) $(GTK)
//图片
(初始界面)
btn1的可扩展为FALSE,那么窗口变大的时候btn1的宽度保持不变
btn2既可扩展也可填充,那么窗口变大的时候btn2跟着窗口的变化而变化
btn3的可填充为FALSE,那么窗口变大的时候btn3不能填充它所在的区域