📄 gtk_tut-8.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN"><HTML><HEAD><meta http-equiv="pragma" content="no-cache"><TITLE>GTK导引: Container物件</TITLE></HEAD><BODY><A HREF="gtk_tut-7.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-7.html"><IMG SRC="prev.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/prev.gif" ALT="Previous"></A><A HREF="gtk_tut-9.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-9.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#toc8" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut.html#toc8"><IMG SRC="toc.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/toc.gif" ALT="Contents"></A><HR><H2><A NAME="s8">8. Container物件</A></H2><H2><A NAME="ss8.1">8.1 笔记本物件</A></H2><P>笔记本物件好几个"页"的集合, 它们互相交叠在一起,并可包含不同的讯息.这个物件在GUI越来越普及, 它是个在显示有类同功能的资讯时很有用的物件.<P>第一个您会用到的是产生一个新的笔记本物件.<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_notebook_new (void);</PRE></CODE></BLOCKQUOTE><P>一旦物件产生後,共有12个函数可以操作该笔记本物件.我们一个一个来看.<P>第一个是要如何来安排"页标签".这些"页标签"或"tabs", 可以用四个位置, 上, 下, 左, 右.<P><BLOCKQUOTE><CODE><PRE>void gtk_notebook_set_tab_pos (GtkNotebook *notebook, GtkPositionType pos);</PRE></CODE></BLOCKQUOTE><P>GtkPostionType可以是以下四个, 很好认.<UL><LI> GTK_POS_LEFT</LI><LI> GTK_POS_RIGHT</LI><LI> GTK_POS_TOP</LI><LI> GTK_POS_BOTTOM</LI></UL><P>GTK_POS_TOP是内定值.<P>接下来我们来看如何加"一页"到笔记本上.共有三种方法来加页到笔记本上.<P><BLOCKQUOTE><CODE><PRE>void gtk_notebook_append_page (GtkNotebook *notebook, GtkWidget *child, GtkWidget *tab_label);void gtk_notebook_prepend_page (GtkNotebook *notebook, GtkWidget *child, GtkWidget *tab_label);</PRE></CODE></BLOCKQUOTE><P>这些函数新增一页到笔记本, append由後新增,prepend由前新增.*child是要插入笔记本的物件, *tab_label是页标签.<P><BLOCKQUOTE><CODE><PRE>void gtk_notebook_insert_page (GtkNotebook *notebook, GtkWidget *child, GtkWidget *tab_label, gint position);</PRE></CODE></BLOCKQUOTE><P>参数与_append_及_prepend_相同, 除了多出一个参数, 位置.该参数用来指定要插在那里.<P>现在我们知道要如何新增一页, 再来看看如何移除.<P><BLOCKQUOTE><CODE><PRE>void gtk_notebook_remove_page (GtkNotebook *notebook, gint page_num);</PRE></CODE></BLOCKQUOTE><P>这个函数移除掉所指定的那一页.<P>要找出目前正在那一页, 可用以下函数:<P><BLOCKQUOTE><CODE><PRE>gint gtk_notebook_current_page (GtkNotebook *notebook);</PRE></CODE></BLOCKQUOTE><P>以下两个函数是向前或向後移动.若目前在最後一页, 而您用gtk_notebook_next_page, 那麽笔记本会绕回第一页,反之亦然.<P><BLOCKQUOTE><CODE><PRE>void gtk_notebook_next_page (GtkNoteBook *notebook);void gtk_notebook_prev_page (GtkNoteBook *notebook);</PRE></CODE></BLOCKQUOTE><P>以下函数设定"有效页".如果您希望笔记本开启到例如第五页, 您可以用这个函数.内定页为第一页.<P><BLOCKQUOTE><CODE><PRE>void gtk_notebook_set_page (GtkNotebook *notebook, gint page_num);</PRE></CODE></BLOCKQUOTE><P>以下两个函数可新增及移除页标签及边框.<P><BLOCKQUOTE><CODE><PRE>void gtk_notebook_set_show_tabs (GtkNotebook *notebook, gint show_tabs);void gtk_notebook_set_show_border (GtkNotebook *notebook, gint show_border);</PRE></CODE></BLOCKQUOTE><P>show_tabs及show_border可以是TRUE或FALSE(0或1).<P>现在我们来看个范例, 它是从testgtk.c中展开的,用了所有13个函数.该程式产生一个笔记本及六个按钮,包含11页, 以三种方式加页, appended, inserted,及prepended.这些按钮允许您旋转页标签位置, 新增/移除页标签及边框,移除一页, 以前向及後向改变页的位置, 及离开程式.<P><BLOCKQUOTE><CODE><PRE>#include <gtk/gtk.h>/* This function rotates the position of the tabs */void rotate_book (GtkButton *button, GtkNotebook *notebook){ gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos +1) %4);}/* Add/Remove the page tabs and the borders */void tabsborder_book (GtkButton *button, GtkNotebook *notebook){ gint tval = FALSE; gint bval = FALSE; if (notebook->show_tabs == 0) tval = TRUE; if (notebook->show_border == 0) bval = TRUE; gtk_notebook_set_show_tabs (notebook, tval); gtk_notebook_set_show_border (notebook, bval);}/* Remove a page from the notebook */void remove_book (GtkButton *button, GtkNotebook *notebook){ gint page; page = gtk_notebook_current_page(notebook); gtk_notebook_remove_page (notebook, page); /* Need to refresh the widget -- This forces the widget to redraw itself. */ gtk_widget_draw(GTK_WIDGET(notebook), NULL);}void destroy (GtkWidget *widget, gpointer *data){ gtk_main_quit ();}int main (int argc, char *argv[]){ GtkWidget *window; GtkWidget *button; GtkWidget *table; GtkWidget *notebook; GtkWidget *frame; GtkWidget *label; GtkWidget *checkbutton; int i; char bufferf[32]; char bufferl[32]; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (destroy), NULL); gtk_container_border_width (GTK_CONTAINER (window), 10); table = gtk_table_new(2,6,TRUE); gtk_container_add (GTK_CONTAINER (window), table); /* Create a new notebook, place the position of the tabs */ notebook = gtk_notebook_new (); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); gtk_table_attach_defaults(GTK_TABLE(table), notebook, 0,6,0,1); gtk_widget_show(notebook); /* lets append a bunch of pages to the notebook */ for (i=0; i < 5; i++) { sprintf(bufferf, "Append Frame %d", i+1); sprintf(bufferl, "Page %d", i+1); frame = gtk_frame_new (bufferf); gtk_container_border_width (GTK_CONTAINER (frame), 10); gtk_widget_set_usize (frame, 100, 75); gtk_widget_show (frame); label = gtk_label_new (bufferf); gtk_container_add (GTK_CONTAINER (frame), label); gtk_widget_show (label); label = gtk_label_new (bufferl); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label); } /* now lets add a page to a specific spot */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -