Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

GTK入门导引

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  4.4 使用表格来封装

  我们来看看另一个封装的方法 - 用表格. 在很多状况下, 这是极其有用的.

  使用表格, 我们产生格线来将物件放入. 物件会照我们安排的位置排入.

  我们第一个要看的是gtk_table_new这个函数:


GtkWidget* gtk_table_new (gint rows,
gint columns,
gint homogeneous);

  第一个参数是多少列, 第二个是多少栏.

  homogeneous参数用来决定表格如何来定大小. 若homogeneous为TRUE, table boxes会被重定为在其中最大物件的大小. 若homogeneous为FALSE, 则其大小为, "高"为列中最高的物件, 及"宽"栏中最宽的物件大小.

  列及栏的编号为从0到n. n是我们在gtk_table_new中所指定的值. 所以, 如果您指定rows = 2及columns = 2, 整个排列会看起来像这样:


012
0+----------+----------+
 |||
1+----------+----------+
 |||
2+----------+----------+

  坐标系统开始於左上角. 要把物件放进box中, 可用以下函数:


void gtk_table_attach (GtkTable*table,
GtkWidget *child,
gintleft_attach,
gintright_attach,
ginttop_attach,
gintbottom_attach,
gintxoptions,
gintyoptions,
gintxpadding,
gintypadding);

  第一个参数("table")是您才刚产生的表格, 而第二个("child")是您想放进去的物件.

  而left_attach及right_attach参数指定要把物件放在那里, 及用多少个boxes. 如果您想要用右下角的表格, 可以这样填表. left_attach = 1, right_attach = 2, top_attach = 1, bottom_attach = 2.

  现在, 如果您想要物件来使用上面2x2的表格, 您可以使用left_attach = 0, right_attach =2, top_attach = 0, bottom_attach = 1.

  xoptions及yoptions是用来指定封装选项, 可以同时组合多个选项(用or).

  这些选项是:

  GTK_FILL - 如果table box大过物件, 且GTK_FILL 被指定了, 该物件会扩展成使用所有可用的空间.

  GTK_SHRINK - 如果table widget小於该物件, (一般是使用者缩放该视窗), 那麽该物件将会一直被挤压到看不见为止. 如果GTK_SHRINK被指定了, 该物件会跟著table一起缩小.

  GTK_EXPAND - 这会使table本身扩展, 并利用视窗中所有可用空间.

  填空就像boxes, 产生一个在物件周边空白的区域.

  gtk_table_attach()有许多选项. 这里有个捷径:


void gtk_table_attach_defaults (GtkTable*table,
GtkWidget*widget,
gintleft_attach,
gintright_attach,
ginttop_attach,
gintbottom_attach);

  X及Y选项内定为GTK_FILL | GTK_EXPAND, X及Y填空则设为0. 其馀的参数则相同於以上的函数.

  我们另外有gtk_table_set_row_spacing()及gtk_table_set_col_spacing(). 这些会在指定的栏及列插入空白.


void gtk_table_set_row_spacing (GtkTable*table,
gintrow,
gintspacing);
及 
voidgtk_table_set_col_spacing(GtkTable*table,
gintcolumn,
gintspacing);

  对栏来说, 空格是在栏的右边. 而列则是在下面.

  您也可以用以下函数来产生固定的空格.


void gtk_table_set_row_spacings (GtkTable *table,
 gintspacing);
及, 
void gtk_table_set_col_spacings (GtkTable*table,
 gintspacing);

  使用这些函数, 其最後一栏及最後一列并没有空格存在.

  4.5 Table Packing范例

  目前并无说明, 请参照testgtk.c

  5. 物件概论

  在GTK下,一般产生物件的步骤为:

  gtk_*_new - 最普遍产生物件的函数.

  连接信号到信号处理器.

  设定物件属性.

  要将物件包装到一个container可用gtk_container_add()或gtk_box_pack_start().

  gtk_widget_show().

  gtk_widget_show()让GTK知道我们已经完成设定的工作, 并且已经准备好要显示. 您也可以用gtk_widget_hide来隐藏它. 显示物件的顺序并不太重要, 但我建议最後才显示, 这样才不会看到这些视窗们一个一个被画出来. 子物件在使用gtk_widget_show使视窗出现之前是不会被显示出来的.

  5.1 分派系统

  再继续下去您会发现, GTK使用一种分派系统. 一般是用巨集来完成. 您可以看到诸如以下:


GTK_WIDGET(widget) 
GTK_OBJECT(object) 
GTK_SIGNAL_FUNC(function) 
GTK_CONTAINER(container) 
GTK_WINDOW(window) 
GTK_BOX(box) 

  这些在函数中的都是分派参数. 您可以在范例中看到, 而且只要看到该函数就会知道它们是做什麽用的.

  从以下的组织图来看, 所有GtkWidgets都是由GtkObject而来. 这意味著您可以在任何地方, 透过GTK_OBJECT()巨集要求一个物件.

  例如:



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:GTK+/Gnome应用开发   下一篇:GTK v1.2 Tutorial(英文)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号