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

📄 gtk_tut-12.html

📁 gtk 开发手册和参考文档。 包括gtk glib gdk等
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN"><HTML><HEAD><meta http-equiv="pragma" content="no-cache"><TITLE>GTK导引: List物件</TITLE></HEAD><BODY><A HREF="gtk_tut-11.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-11.html"><IMG SRC="prev.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/prev.gif" ALT="Previous"></A><A HREF="gtk_tut-13.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-13.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#toc12" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut.html#toc12"><IMG SRC="toc.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/toc.gif" ALT="Contents"></A><HR><H2><A NAME="s12">12. List物件</A></H2><P>GtkList物件被设计成是个vertical container,而在其中的物件必须是GtkListItem.<P>GtkList物件有其自己的视窗用来接取事件,而其背景色一般是白色的.由於它是由GtkContainer而来,您也可以用GTK_CONTAINER(List)巨集来处理.请见GtkContainer物件一章.您应该已经熟悉GList的用法, 及其相关函数g_list_*(),这样您才不会在此遭遇到问题.<P>在GtkList物件有一栏对我们来说很重要.<P><BLOCKQUOTE><CODE><PRE>struct _GtkList{  [...]  GList *selection;  guint selection_mode;  [...]}; </PRE></CODE></BLOCKQUOTE><P>GtkList的selection栏指向一个所有items的link list, 其中记录所有被记录的项目,若为`NULL'则selection为空的.因此要知道目前的selection, 我们可以读取GTK_LIST()->selection一栏.但不要修改它们, 因为它们是由内部所维护.<P>GtkList的selection_mode决定selection的机制,而GTK_LIST()->selection栏的内容为:<P>selection_mode可以是以下其中一种:<UL><LI> GTK_SELECTION_SINGLE   selection可以是`NULL'或对一个已选项目, 包含一个GList* pointer.</LI><LI> GTK_SELECTION_BROWSE   若list没有有效的物件, selection可以是`NULL'否则它会包含一个GList* pointer, 而且就是一个list item.</LI><LI> GTK_SELECTION_MULTIPLE  若list中没有item被选取, selection可以是`NULL'否则会有一个GList* pointer, 并且指向第一个selected item.并一直向後接到第二个...</LI><LI> GTK_SELECTION_EXTENDED  selection永远为`NULL'.</LI></UL><P>内定为GTK_SELECTION_MULTIPLE.<P><H2><A NAME="ss12.1">12.1 信号</A></H2><P><BLOCKQUOTE><CODE><PRE>void GtkList::selection_changed (GtkList *LIST)</PRE></CODE></BLOCKQUOTE><P>当selection区域改变的时候, 这个信号会被触发.这会在当GtkList的子物件被select或unselect时发生.<P><BLOCKQUOTE><CODE><PRE>void GtkList::select_child (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>当GtkList的子物件被select时, 这个信号会被触发.这一般在gtk_list_select_item(), gtk_list_select_child(), 按钮被按下及有时间接触发或有子物件新增或移除时发生.<P><BLOCKQUOTE><CODE><PRE>void GtkList::unselect_child (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>当GtkList的子物件被unselect时, 这个信号会被触发.这一般在gtk_list_unselect_item(), gtk_list_unselect_child(), 按钮被按下及有时间接触发或有子物件新增或移除时发生.<P><H2><A NAME="ss12.2">12.2 函数</A></H2><P><BLOCKQUOTE><CODE><PRE>guint gtk_list_get_type (void)</PRE></CODE></BLOCKQUOTE><P>返回`GtkList' type identifier.<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_list_new (void)</PRE></CODE></BLOCKQUOTE><P>产生新的`GtkList' object. 新的物件其返回值为`GtkWidget' object的指标.`NULL'表示失败.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_insert_items (GtkList *LIST, GList *ITEMS, gint POSITION)</PRE></CODE></BLOCKQUOTE><P>插入list items到LIST里面, 由POSITION开始.ITEMS是双向链结串列.每个项目要指向一个产生出来的GtkListItem.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_append_items (GtkList *LIST, GList *ITEMS)</PRE></CODE></BLOCKQUOTE><P>就像gtk_list_insert_items()一样插入ITEMS到LIST後面.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_prepend_items (GtkList *LIST, GList *ITEMS)</PRE></CODE></BLOCKQUOTE><P>就如gtk_list_insert_items()一样插入ITEMS到LIST前面.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_remove_items (GtkList *LIST, GList *ITEMS)</PRE></CODE></BLOCKQUOTE><P>从LIST中移除list items.ITEMS是双向链结串列, 每个node要指向child.设计者要自行呼叫g_list_free(ITEMS).设计者也要自行处理掉list items.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_clear_items (GtkList *LIST, gint START, gint END)</PRE></CODE></BLOCKQUOTE><P>从LIST中移除并销毁list items.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_select_item (GtkList *LIST, gint ITEM)</PRE></CODE></BLOCKQUOTE><P>透过在LIST中目前的位置,触发GtkList::select_child信号给指定的list item.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_unselect_item (GtkList *LIST, gint ITEM)</PRE></CODE></BLOCKQUOTE><P>透过在LIST中目前的位置,触发GtkList::unselect_child信号给指定的list item.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_select_child (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>触发GtkList::select_child信号给指定的CHILD.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_unselect_child (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>触发GtkList::unselect_child信号给指定的CHILD.<P><BLOCKQUOTE><CODE><PRE>gint gtk_list_child_position (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>返回CHILD在LIST中的位置.`-1'为失败.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_set_selection_mode (GtkList *LIST, GtkSelectionMode MODE)</PRE></CODE></BLOCKQUOTE><P>设定LIST到选择模式MODE, 可以是GTK_SELECTION_SINGLE,GTK_SELECTION_BROWSE, GTK_SELECTION_MULTIPLE 或 GTK_SELECTION_EXTENDED.<P><BLOCKQUOTE><CODE><PRE>GtkList* GTK_LIST (gpointer OBJ)</PRE></CODE></BLOCKQUOTE><P>传一个generic pointer到`GtkList*'. *Note Standard Macros::, for more info.<P><BLOCKQUOTE><CODE><PRE>GtkListClass* GTK_LIST_CLASS (gpointer CLASS)</PRE></CODE></BLOCKQUOTE><P>传一个generic pointer到`GtkListClass*'. *Note Standard Macros::, for more info.<P><BLOCKQUOTE><CODE><PRE>gint GTK_IS_LIST (gpointer OBJ)</PRE></CODE></BLOCKQUOTE><P>决定是否一个generic pointer对应到`GtkList' object. *Note Standard Macros::, for more info.<P><P><H2><A NAME="ss12.3">12.3 范例</A></H2><P>以下是个范例程式, 将会列出GtkList的选择改变, 并让您用滑鼠右键"逮捕"list items.<P><BLOCKQUOTE><CODE><PRE>/* compile this program with: * $ gcc -I/usr/local/include/ -lgtk -lgdk -lglib -lX11 -lm -Wall main.c *//* include the gtk+ header files * include stdio.h, we need that for the printf() function */#include        &lt;gtk/gtk.h&gt;#include        &lt;stdio.h&gt;/* this is our data identification string to store * data in list items */const   gchar   *list_item_data_key=&quot;list_item_data&quot;;/* prototypes for signal handler that we are going to connect * to the GtkList widget */static  void    sigh_print_selection    (GtkWidget      *gtklist,                                         gpointer       func_data);static  void    sigh_button_event       (GtkWidget      *gtklist,                                         GdkEventButton *event,                                         GtkWidget      *frame);/* main function to set up the user interface */gint main (int argc, gchar *argv[]){                                      GtkWidget       *separator;    GtkWidget       *window;    GtkWidget       *vbox;    GtkWidget       *scrolled_window;    GtkWidget       *frame;    GtkWidget       *gtklist;    GtkWidget       *button;    GtkWidget       *list_item;    GList           *dlist;    guint           i;    gchar           buffer[64];            /* initialize gtk+ (and subsequently gdk) */    gtk_init(&amp;argc, &amp;argv);            /* create a window to put all the widgets in     * connect gtk_main_quit() to the &quot;destroy&quot; event of     * the window to handle window manager close-window-events     */    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);    gtk_window_set_title(GTK_WINDOW(window), &quot;GtkList Example&quot;);    gtk_signal_connect(GTK_OBJECT(window),                       &quot;destroy&quot;,                       GTK_SIGNAL_FUNC(gtk_main_quit),                       NULL);            /* inside the window we need a box to arrange the widgets     * vertically */    vbox=gtk_vbox_new(FALSE, 5);    gtk_container_border_width(GTK_CONTAINER(vbox), 5);    gtk_container_add(GTK_CONTAINER(window), vbox);    gtk_widget_show(vbox);        /* this is the scolled window to put the GtkList widget inside */    scrolled_window=gtk_scrolled_window_new(NULL, NULL);    gtk_widget_set_usize(scrolled_window, 250, 150);    gtk_container_add(GTK_CONTAINER(vbox), scrolled_window);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -