龙空技术网

用GTK+来创建一个带界面的C语言程序5—用网格容器排列按钮

suo索 85

前言:

当前小伙伴们对“c语言软件的界面”可能比较注意,姐妹们都想要了解一些“c语言软件的界面”的相关文章。那么小编也在网络上汇集了一些有关“c语言软件的界面””的相关文章,希望看官们能喜欢,同学们快快来了解一下吧!

在这一节中将学习如何使用框架控件和能容纳多行和多列控件的网格容器以及如何灵活在网格容器中排放控件。

盒状容器只能容纳一行或者一列控件,如何容纳多行多列控件呢?向盒状容器中再添加盒状容器。这当然是创建多行多列控件布局的一个好方法。还有一个方法就是使用网格容器(GtkGrid)控件。

网格容器是一种能容纳多行多列控件且简单易用的容器,它提供了坐标方式表示控件所要摆放的位置,使按行列排列多个控件变得更加简单。

/*用格状容器排列按钮GtkGrid.c*/

#include <gtk/gtk.h>

int main(int argc, char * argv[])

{

GtkWidget * window;

GtkWidget * grid;

GtkWidget * button;

GtkWidget * frame;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

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

gtk_window_set_title(GTK_WINDOW(window), "格状容器");

gtk_window_set_default_size(GTK_WINDOW(window), 200, 300);

gtk_container_set_border_width(GTK_CONTAINER(window),20);

frame = gtk_frame_new("请注意下列按钮排列");

gtk_container_add(GTK_CONTAINER(window), frame);

grid = gtk_grid_new();

gtk_container_add(GTK_CONTAINER(frame), grid);

button = gtk_button_new_with_label("按钮一");

//添加按钮一到位置(0,0)处,并设置高,宽均为一个单元

gtk_grid_attach(GTK_GRID(grid), button, 0, 0, 1, 1);

//添加按钮一到位置(1,0)处,并设置高,宽均为一个单元

button = gtk_button_new_with_label("按钮二");

gtk_grid_attach(GTK_GRID(grid), button, 1, 0, 1, 1);

//添加按钮一到位置(0,1)处,并设置高为一个单元,宽为两个单元

button = gtk_button_new_with_label("按钮三");

gtk_grid_attach(GTK_GRID(grid), button, 2, 0, 1, 2);

button = gtk_button_new_with_label("按钮四");

gtk_grid_attach(GTK_GRID(grid), button, 0, 1, 2, 1);

gtk_widget_show_all(window);

gtk_main();

return FALSE;

}

运行结果:

网格容器布局

代码分析:

1.创建框架控件

框架控件(GtkFrame)和窗口一样是一种只能容纳一个控件的对象,但它不能像窗口那样直接显示出来,这一点又和盒状容器一样,必须把它放到窗口中才能显示出来。框架(Frames)可以用于盒子中封装一个或一组控件,框架本身还可以有一个标签。标签的位置和盒子的风格可以灵活改变。框架控件在GTK+编程中主要起到美化、修饰窗口、规范控件的范围和提示作用。可以用gtk_frame_new函数创建框架,参数是显示在框架上的标题文字。

GtkWidget * gtk_frame_new(const gchar * label);

标签的缺省值放在框架的左上角。传递NULL值作为label参数时,框架不显示标签。标签文本可以用下面的函数改变。

设置框架的标签:

void gtk_frame_set_label( GtkFrame * frame, const gchar * label );

设置框架标签的位置:

void gtk_frame_set_label_align( GtkFrame *frame,

gfloat xalign,

gfloat yalign );

xalign和yalign参数取值范围介于0.0和1.0之间。xalign指定标签在框架构件上部水平线上的位置。yalign目前还没有被使用。xalign的缺省值是0.0,它将标签放在框架构件的最左端。

设置显示框架的轮廓:

void gtk_frame_set_shadow_type( GtkFrame *frame,

GtkShadowType type);

type参数可以取以下值之一:

GTK_SHADOW_NONE

GTK_SHADOW_IN

GTK_SHADOW_OUT

GTK_SHADOW_ETCHED_IN (缺省值)

GTK_SHADOW_ETCHED_OUT

2.创建网格容器

最关键的就是创建网格容器了,它用gtk_grid_new()函数来创建一个网格布局容器,使用gtk_grid_attach()函数将控件添加到网格容器中。

void gtk_grid_attach(grid, child, int left,int top, int width, int height):将子控件child附加到grid中,后面四个参数依次代表第几行,第几列,横向跨度,纵向跨度。

在本示例演示了网格容器的一般用法,当设计的程序界面控件比较多时,就可以考虑用格状容器来排放控件了。

标签: #c语言软件的界面 #c语言网格