📄 gtk_tut-4.html
字号:
separator = gtk_hseparator_new (); /* The last 3 arguments to gtk_box_pack_start are: expand, fill, padding. */ gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5); gtk_widget_show (separator); break; case 2: /* create a new label, remember box1 is a vbox as created * near the beginning of main() */ label = gtk_label_new ("gtk_hbox_new (FALSE, 10);"); gtk_misc_set_alignment (GTK_MISC (label), 0, 0); gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0); gtk_widget_show (label); /* Args are: homogeneous, spacing, expand, fill, padding */ box2 = make_box (FALSE, 10, TRUE, FALSE, 0); gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); gtk_widget_show (box2); /* Args are: homogeneous, spacing, expand, fill, padding */ box2 = make_box (FALSE, 10, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); gtk_widget_show (box2); separator = gtk_hseparator_new (); /* The last 3 arguments to gtk_box_pack_start are: expand, fill, padding. */ gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5); gtk_widget_show (separator); label = gtk_label_new ("gtk_hbox_new (FALSE, 0);"); gtk_misc_set_alignment (GTK_MISC (label), 0, 0); gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0); gtk_widget_show (label); /* Args are: homogeneous, spacing, expand, fill, padding */ box2 = make_box (FALSE, 0, TRUE, FALSE, 10); gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); gtk_widget_show (box2); /* Args are: homogeneous, spacing, expand, fill, padding */ box2 = make_box (FALSE, 0, TRUE, TRUE, 10); gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); gtk_widget_show (box2); separator = gtk_hseparator_new (); /* The last 3 arguments to gtk_box_pack_start are: expand, fill, padding. */ gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5); gtk_widget_show (separator); break; case 3: /* This demonstrates the ability to use gtk_box_pack_end() to * right justify widgets. First, we create a new box as before. */ box2 = make_box (FALSE, 0, FALSE, FALSE, 0); /* create the label that will be put at the end. */ label = gtk_label_new ("end"); /* pack it using gtk_box_pack_end(), so it is put on the right side * of the hbox created in the make_box() call. */ gtk_box_pack_end (GTK_BOX (box2), label, FALSE, FALSE, 0); /* show the label. */ gtk_widget_show (label); /* pack box2 into box1 (the vbox remember ? :) */ gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); gtk_widget_show (box2); /* a separator for the bottom. */ separator = gtk_hseparator_new (); /* this explicitly sets the separator to 400 pixels wide by 5 pixels * high. This is so the hbox we created will also be 400 pixels wide, * and the "end" label will be separated from the other labels in the * hbox. Otherwise, all the widgets in the hbox would be packed as * close together as possible. */ gtk_widget_set_usize (separator, 400, 5); /* pack the separator into the vbox (box1) created near the start * of main() */ gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5); gtk_widget_show (separator); } /* Create another new hbox.. remember we can use as many as we need! */ quitbox = gtk_hbox_new (FALSE, 0); /* Our quit button. */ button = gtk_button_new_with_label ("Quit"); /* setup the signal to destroy the window. Remember that this will send * the "destroy" signal to the window which will be caught by our signal * handler as defined above. */ gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window)); /* pack the button into the quitbox. * The last 3 arguments to gtk_box_pack_start are: expand, fill, padding. */ gtk_box_pack_start (GTK_BOX (quitbox), button, TRUE, FALSE, 0); /* pack the quitbox into the vbox (box1) */ gtk_box_pack_start (GTK_BOX (box1), quitbox, FALSE, FALSE, 0); /* pack the vbox (box1) which now contains all our widgets, into the * main window. */ gtk_container_add (GTK_CONTAINER (window), box1); /* and show everything left */ gtk_widget_show (button); gtk_widget_show (quitbox); gtk_widget_show (box1); /* Showing the window last so everything pops up at once. */ gtk_widget_show (window); /* And of course, our main function. */ gtk_main (); /* control returns here when gtk_main_quit() is called, but not when * gtk_exit is used. */ return 0;}</PRE></CODE></BLOCKQUOTE><P><P><H2><A NAME="ss4.4">4.4 使用表格来封装</A></H2><P>我们来看看另一个封装的方法 - 用表格.在很多状况下, 这是极其有用的.<P>使用表格, 我们产生格线来将物件放入.物件会照我们安排的位置排入.<P>我们第一个要看的是gtk_table_new这个函数:<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_table_new (gint rows, gint columns, gint homogeneous);</PRE></CODE></BLOCKQUOTE><P>第一个参数是多少列, 第二个是多少栏.<P>homogeneous参数用来决定表格如何来定大小.若homogeneous为TRUE, table boxes会被重定为在其中最大物件的大小.若homogeneous为FALSE, 则其大小为, "高"为列中最高的物件, 及"宽"栏中最宽的物件大小.<P>列及栏的编号为从0到n.n是我们在gtk_table_new中所指定的值.所以, 如果您指定rows = 2及columns = 2, 整个排列会看起来像这样:<P><BLOCKQUOTE><CODE><PRE> 0 1 20+----------+----------+ | | |1+----------+----------+ | | |2+----------+----------+</PRE></CODE></BLOCKQUOTE><P>坐标系统开始於左上角.要把物件放进box中, 可用以下函数:<P><BLOCKQUOTE><CODE><PRE>void gtk_table_attach (GtkTable *table, GtkWidget *child, gint left_attach, gint right_attach, gint top_attach, gint bottom_attach, gint xoptions, gint yoptions, gint xpadding, gint ypadding);</PRE></CODE></BLOCKQUOTE> <P>第一个参数("table")是您才刚产生的表格,而第二个("child")是您想放进去的物件.<P>而left_attach及right_attach参数指定要把物件放在那里,及用多少个boxes. 如果您想要用右下角的表格, 可以这样填表.left_attach = 1, right_attach = 2, top_attach = 1, bottom_attach = 2.<P>现在, 如果您想要物件来使用上面2x2的表格,您可以使用left_attach = 0, right_attach =2, top_attach = 0, bottom_attach = 1.<P>xoptions及yoptions是用来指定封装选项, 可以同时组合多个选项(用or).<P>这些选项是:<UL><LI>GTK_FILL - 如果table box大过物件, 且GTK_FILL被指定了, 该物件会扩展成使用所有可用的空间.</LI><LI>GTK_SHRINK - 如果table widget小於该物件,(一般是使用者缩放该视窗), 那麽该物件将会一直被挤压到看不见为止.如果GTK_SHRINK被指定了, 该物件会跟著table一起缩小.</LI><LI>GTK_EXPAND - 这会使table本身扩展, 并利用视窗中所有可用空间.</LI></UL><P>填空就像boxes, 产生一个在物件周边空白的区域.<P>gtk_table_attach()有许多选项. 这里有个捷径:<P><BLOCKQUOTE><CODE><PRE>void gtk_table_attach_defaults (GtkTable *table, GtkWidget *widget, gint left_attach, gint right_attach, gint top_attach, gint bottom_attach);</PRE></CODE></BLOCKQUOTE><P>X及Y选项内定为GTK_FILL | GTK_EXPAND, X及Y填空则设为0.其馀的参数则相同於以上的函数.<P>我们另外有gtk_table_set_row_spacing()及gtk_table_set_col_spacing().这些会在指定的栏及列插入空白.<P><BLOCKQUOTE><CODE><PRE>void gtk_table_set_row_spacing (GtkTable *table, gint row, gint spacing);</PRE></CODE></BLOCKQUOTE>及<BLOCKQUOTE><CODE><PRE>void gtk_table_set_col_spacing (GtkTable *table, gint column, gint spacing);</PRE></CODE></BLOCKQUOTE><P>对栏来说, 空格是在栏的右边.而列则是在下面.<P>您也可以用以下函数来产生固定的空格.<P><BLOCKQUOTE><CODE><PRE>void gtk_table_set_row_spacings (GtkTable *table, gint spacing);</PRE></CODE></BLOCKQUOTE><P>及,<BLOCKQUOTE><CODE><PRE>void gtk_table_set_col_spacings (GtkTable *table, gint spacing);</PRE></CODE></BLOCKQUOTE><P>使用这些函数, 其最後一栏及最後一列并没有空格存在.<P><H2><A NAME="ss4.5">4.5 Table Packing范例</A></H2><P>目前并无说明, 请参照testgtk.c<P><HR><A HREF="gtk_tut-3.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-3.html"><IMG SRC="prev.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/prev.gif" ALT="Previous"></A><A HREF="gtk_tut-5.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-5.html"><IMG SRC="next.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/next.gif" ALT="Next"></A><A HREF="gtk_tut.html#toc4" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut.html#toc4"><IMG SRC="toc.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/toc.gif" ALT="Contents"></A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -