⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk_tut-4.html

📁 gtk 开发手册和参考文档。 包括gtk glib gdk等
💻 HTML
📖 第 1 页 / 共 2 页
字号:
        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 (&quot;gtk_hbox_new (FALSE, 10);&quot;);        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 (&quot;gtk_hbox_new (FALSE, 0);&quot;);        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 (&quot;end&quot;);        /* 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 &quot;end&quot; 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 (&quot;Quit&quot;);        /* setup the signal to destroy the window.  Remember that this will send     * the &quot;destroy&quot; signal to the window which will be caught by our signal     * handler as defined above. */    gtk_signal_connect_object (GTK_OBJECT (button), &quot;clicked&quot;,                               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 + -