马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 G0398 于 2014-10-26 15:11 编辑
由于GTK中容器数量较多,这个教程拆分成多个帖子来写。
这一讲讲解GtkAspectFrame和GtkBox
GtkAspectFrame
这个部件类似于GroupBox,一个带有标签的框,由于它“继承”于 GtkBin,所以只能添加一个子部件。
#include <gtk/gtk.h>
int window_width = 600;
int window_height = 400;
int main(int argc,char *argv[])
{
GtkWidget *window,*aspect_frame,*label;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"hello fishc ");
gtk_widget_set_size_request(window,300,200);
aspect_frame = gtk_aspect_frame_new("Tags",0,0,0,TRUE);
gtk_container_add(GTK_CONTAINER(window), aspect_frame);
label = gtk_label_new("this is a tag.");
gtk_container_add(GTK_CONTAINER(aspect_frame), label);
gtk_widget_show_all(window);
gtk_main ();
return 0;
}
通过gtk_aspect_frame_new函数进行创建时参数设置。这个函数有5个参数:
label:设置frame的标签文本,
xalign:(参见上一节GtkAlignment图片)
yalign:(参见上一节GtkAlignment图片)
ratio:子部件纵横比(只有obey_child参数设置为false时生效)
obey_child:决定是否启用ratio参数
GtkBox
GtkBox是一个容器盒子,包括多个“子类”:GtkHBox,GtkVBox,GtkButtonBox,GtkHButtonBox,GtkVButtonBox。
其中H(horizontal)是水平的意思,V(verital)是垂直的意思,这里只讲一个带H的意思。
一个简单的GtkBox例子:
#include <gtk/gtk.h>
int window_width = 600;
int window_height = 400;
int main(int argc,char *argv[])
{
GtkWidget *window,*box,*label1,*label2;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"hello fishc ");
gtk_widget_set_size_request(window,300,200);
box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
gtk_container_add(GTK_CONTAINER(window), box);
label1 = gtk_label_new("label1");
label2 = gtk_label_new("label2");
gtk_box_pack_start(GTK_BOX(box), label1, TRUE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), label2, FALSE, FALSE, 0);
gtk_widget_show_all(window);
gtk_main ();
return 0;
}
gtk_box_new函数创建一个GtkBox”对象“,它有两个参数:
orientation:用来指定方向,是水平还是垂直,
定义:typedef enum {
GTK_ORIENTATION_HORIZONTAL,
GTK_ORIENTATION_VERTICAL
} GtkOrientation;
spacing:默认子部件间距。
在创建GtkBox的时候可以指定方向,这样就能创建出GtkHBox和GtkVBox了,另外文档里也指出:3.2版本后gtk_hbox_new和gtk_vbox_new是不赞成使用的(gtk_hbutton_box_new和gtk_vbutton_box_new也不赞成使用),所以我们只要了解了GtkBox和GtkButtonBox就可以了。
gtk_box_pack_start函数用来添加子部件。其中第三个参数(expand)为扩展,设置为TRUE后子部件将分配到box的所有扩展空间,第四个参数(fill)为填充,设置为TRUE用来填充空间,而不仅仅是padding,这个参数和expand参数配合使用,只有expand设置为TRUE时生效。
gtk_box_pack_end和start正好相反,这个函数是从右到左添加部件。
GtkButtonBox
注意大家不要被它的名字所迷惑,这家伙可以添加各种部件,不仅仅是button
下面是为GtkLabel布局的一个示例:
#include <gtk/gtk.h>
int window_width = 600;
int window_height = 400;
int main(int argc,char *argv[])
{
GtkWidget *window,*button_box,*label1,*label2,*label3;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"hello fishc ");
gtk_widget_set_size_request(window,300,200);
button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
gtk_container_add(GTK_CONTAINER(window), button_box);
label1 = gtk_label_new("label1");
label2 = gtk_label_new("label2");
label3 = gtk_label_new("label2");
gtk_container_add(GTK_CONTAINER(button_box), label1);
gtk_container_add(GTK_CONTAINER(button_box), label2);
gtk_container_add(GTK_CONTAINER(button_box), label3);
gtk_widget_show_all(window);
gtk_main ();
return 0;
}
可以通过gtk_button_box_set_layout函数设置布局风格,效果这里就不展示了,可以参考这个图,大家自己设置看下。
(GTK bin文件夹下的gtk3-demo.exe例程所提供)
下篇继续讲布局容
|