linux应用程序开发指南之21-12.pdf

上传人:asd****56 文档编号:70345571 上传时间:2023-01-19 格式:PDF 页数:11 大小:306.64KB
返回 下载 相关 举报
linux应用程序开发指南之21-12.pdf_第1页
第1页 / 共11页
linux应用程序开发指南之21-12.pdf_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《linux应用程序开发指南之21-12.pdf》由会员分享,可在线阅读,更多相关《linux应用程序开发指南之21-12.pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、下载第12章 树 构 件树构件一般用于显示分层结构的数据。树构件本身是 G t k Tr e e I t e m构件类型的垂直容器。树构件本身和分栏列表构件(G t k C L i s t)差别并不大:它们都是由容器构件派生而来的,其中与容器相关的函数在树构件和分栏列表构件中同样起作用。差别在于树构件可以嵌套另外的树构件。下面简要介绍怎么使用树构件。树构件有自己的X窗口,缺省情况下是白色的背景。还有,绝大多数树的函数与分栏列表的函数工作方法是一样的。然而,树构件并不是从分栏列表构件派生而来的,因此,这些函数不可以互换。12.1 创建新树构件用下面函数创建树构件:GtkWidget*gtk_tr

2、ee_new(void);像分栏列表构件一样,当项目添加到树构件时,或当子树扩展时,树构件会自动扩展。因为这个原因,所以需要将树构件组装到一个滚动窗口构件中。滚动窗口构件的缺省尺寸是很小的,因此一般对滚动窗口要用 g t k _ w i d g e t _ s e t _ u s i z e()函数设置它的缺省尺寸,以保证树构件足够大,可以看到其中的项目。有了树构件后,就可以向其中添加项目了。现在,我们先介绍怎样创建树项构件:GtkWidget*gtk_tree_item_new_with_label(gchar*label);现在可以用下面的函数将树项构件添加到树构件中了:void gtk_

3、tree_append(GtkTree *tree,GtkWidget*tree_item);void gtk_tree_prepend(GtkTree *tree,GtkWidget*tree_item);注意,必须一次将全部树项添加到树构件中。没有与 g t k _ l i s t _*_ i t e m s()等价的函数。12.1.1 添加一个子树子树与树构件的创建方法类似。子树要加到一个树构件的树项下面,使用以下函数:void gtk_tree_item_set_subtree(GtkTreeItem*tree_item,GtkWidget *subtree);在子树添加到一个树项之前

4、或之后都不需要对子树调用g t k _ w i d g e t _ s h o w()函数。然而,在调用 g t k _ t r e e _ i t e m _ s e t _ s u b t r e e()之前,必须将树项添加到一棵父树上。这是因为:从技术上来说,子树的父树并不是拥有它的树项构件(G t k Tr e e I t e m),而是树项所在的树。当将子树添加到树项时,一个“”或“”符号会出现在旁边,用户可以点击它“展开”或“折叠”子树也就是显示或隐藏子树。缺省状态树项是折叠起来的。注意,在折叠树项时,所有子树的选中状态仍然保持原有状态,这可能是用户不希望看到的。第1 2章树构件使

5、用205下载12.1.2 处理选中的列表与分栏列表构件 G t k C L i s t一样,树构件类型也有一个选择域。可以用下面的函数设置选择模式以控制树构件的行为:void gtk_tree_set_selection_mode(GtkTree *tree,GtkSelectionMode mode);与各种选择模式相关的语义在分栏列表构件 G t k C L i s t中有详细的介绍。与G t k C L i s t构件一样,当选择列表项或取消选择时,会引发 s e l e c t _ c h i l d、u n s e l e c t _ c h i l d、和s e l e c t i

6、 o n _ c h a n g e d信号。然而,要使用这些信号,需要知道树构件怎样引发信号,以及如何查找选中的列表项。所有的树构件都有自己的X窗口,它们能够接受事件,例如鼠标点击。然而,要让树构件的选择类型为G T K _ S E L E C T I O N _ S I N G L E和G T K _ S E L E C T I O N _ B R O W S E的树能够正常动作,选中项的列表必须是针对树构件层次上最顶层的(也就是所谓的“根”树)。因而,除非你已经知道它是“根”树,否则,直接访问任意一个树构件的选择状态并不是什么好主意。应该使用 GTK_TREE_SELECTION(Tr

7、e e)宏,它将给出一个指向“根”树的选择列表的指针。当然,如果选择模式是 G T K _ S E L E C T I O N _ M U LT I P L E(可以多选),这个选择列表也包含了其他不在所涉及到的子树下的树项。最后,整个树都能引发s e l e c t _ c h i l d(理论上还有u n s e l e c t _ c h i l d)信号,但是,只有根树才能引发s e l e c t i o n _ c h a n g e d信号。因而,如果想对一棵树和它的子树的 s e l e c t _ c h i l d信号进行响应,必须对每一个子树调用g t k _ s i g

8、 n a l _ c o n n e c t()函数。12.1.3 树构件内部机制Tr e e的结构定义是这个样子:struct _GtkTreeGtkContainer container;GList*children;GtkTree*root_tree;/*owner of selection list*/GtkWidget*tree_owner;GList*selection;guint level;guint indent_value;guint current_indent;guint selection_mode:2;guint view_mode:1;guint view_lin

9、e:1;前面已经介绍过了直接访问树的选择状态的危险性。树构件定义中的其他部分也可以用宏或者函数访问。GTK_IS_ROOT_TREE(Tr e e)返回一个布尔值,指明一个树是否是“根”树,而GTK_TREE_ROOT_TREE(Tr e e)宏返回指定树的“根”树(G t k Tr e e类型的值)(所以,要记住如果想使用g t k _ w i d g e t _*()类型的函数,要用GTK_WIDGET(Tr e e)宏将对象转换为构件类型)。与其直接访问Tr e e构件的子节点域,不如用 G T K _ C O N TAINER(Tr e e)宏将树转换为一个206使第二部分 Linux

10、编程常用C语言函数库及构件库下载指针,然后将它传递到 g t k _ c o n t a i n e r _ c h i l d r e n()函数中。这样将为原来的列表创建一个副本。使用完后要用g _ f r e e()函数释放它,或用破坏性的方法遍历它。如下所示:children=gtk_container_children(GTK_CONTAINER(tree);while(children)do_something_nice(GTK_TREE_ITEM(children-data);children=g_list_remove_link(children,children);上面的t

11、r e e _ o w n e r域只在子树中有定义,它指向容纳这个子树的树项构件;l e v e l域指出特定树的嵌套层次,根部树的 l e v e l是0,每一个子树比它的双亲树的 l e v e l大1。这个域只有在树已在屏幕上绘出后才有设置值。12.1.4 信号void selection_changed(GtkTree*tree);当树构件的选择区域发生变化时,会引发这个信号。也就是当选中树构件的子树或取消选择时。void select_child(GtkTree *tree,GtkWidget*child);当选中树构件的子树时,将引发这个信号。当调用g t k _ t r e e

12、 _ s e l e c t _ i t e m()和g t k _ t r e e _ s e l e c t _ c h i l d()、或当鼠标按钮按下,调用g t k _ t r e e _ i t e m _ t o g g l e()和g t k _ i t e m _ t o g g l e()函数时,也会引发该信号。当子树被添加到树上或者将子树从树上删除时会间接引发这个信号。void unselect_child(GtkTree *tree,GtkWidget*child);当树的子树要被取消选中时,引发这个信号。12.1.5 函数和宏guint gtk_tree_get_ty

13、pe(void);返回G t k Tr e e构件的类型标识符GtkWidget*gtk_tree_new(void);创建新树,并返回指向G t k Wi d g e t对象类型的指针。如果创建失败,返回 N U L L。void gtk_tree_append(GtkTree *tree,GtkWidget*tree_item);将一个树项添加到树构件的后面。void gtk_tree_prepend(GtkTree *tree,GtkWidget*tree_item);将一个树项添加到树构件的前面。void gtk_tree_insert(GtkTree *tree,GtkWidget*

14、tree_item,gint position);在树构件中的指定位置插入树项。void gtk_tree_remove_items(GtkTree*tree,GList *items);将一个树项列表(GList*形式的列表)从树构件中删除。注意,从一个树上删除一个树项会第1 2章树构件使用207下载解除它和它的子树,以及该子树的子树(如果有的话)的引用。如果只想删除一个树项,可以使用g t k _ c o n t a i n e r _ r e m o v e()函数。void gtk_tree_clear_items(GtkTree*tree,gint start,gint end);删

15、除树构件中从s t a r t位置到e n d位置的树项。和上一个函数一样,它会解除树项及其子树的引用,因为这个函数只是构造一个列表,然后将列表传递给 g t k _ t r e e _ r e m o v e _ i t e m s()函数。void gtk_tree_select_item(GtkTree*tree,gint item);对指定i t e m位置的树项引发“s e l e c t _ i t e m”信号,并选中它(除非在信号处理函数中取消选择)。void gtk_tree_unselect_item(GtkTree*tree,gint item);对指定i t e m位置

16、的树项引发“u n s e l e c t _ i t e m”信号,并取消选择。void gtk_tree_select_child(GtkTree *tree,GtkWidget*tree_item);对子树项引发“s e l e c t _ i t e m”信号,并且选中它。void gtk_tree_unselect_child(GtkTree *tree,GtkWidget*tree_item);让子树项引发“u n s e l e c t _ i t e m”信号,并取消选中状态。gint gtk_tree_child_position(GtkTree *tree,GtkWidge

17、t*child);返回一个子构件在树中的位置。如果子构件不在树中,将返回-1。void gtk_tree_set_selection_mode(GtkTree *tree,GtkSelectionMode mode);设置选择模式。模式可以是 GTK_SELECTION_SINGLE(缺省值),或G T K _ S E L E C T I O N_ B R O W S E、G T K _ S E L E C T I O N _ M U LT I P L E或G T K _ S E L E C T I O N _ E X T E N D E D。它只对根部树有定义,也只有对根部树有意义,因为只有

18、根部树才会被选择。它对子树设置没有任何效果,并简单忽略设置值。void gtk_tree_set_view_mode(GtkTree *tree,GtkTreeViewMode mode);设置“视图模式”可以是GTK_TREE_VIEW_LINE(缺省值)或GTK_TREE_VIEW_ITEM。视图模式从一个树构件传递到它的子树,并且不能对某个子树单独设置(这种说法也不完全正确)。用术语解释“视图模式”相当暧昧,而在图中它决定当一个树的孩子被选中时,突出显示是什么样子。如果是G T K _ T R E E _ V I E W _ L I N E,整个树项会突出显示,如果是G T K _ T

19、R E E _ V I E W _ I T E M,只有子构件(通常是标签)突出显示。void gtk_tree_set_view_lines(GtkTree*tree,guint flag);是否在树项间划线。F l a g参数可以是T R U E代表在树项间划线,或者FA L S E,在树项间不划线。GtkTree*GTK_TREE(gpointer obj);208使第二部分 Linux编程常用C语言函数库及构件库下载将一个普通对象指针转换为G t k Tree*指针。GtkTreeClass*GTK_TREE_CLASS(gpointer class);将一个普通类指针转换为G t k

20、 TreeClass*指针。gint GTK_IS_TREE(gpointer obj);判定一个普通指针是否指向一个G t k Tr e e对象。gint GTK_IS_ROOT_TREE(gpointer obj)判定一个普通指针是否指向 G t k Tr e e构件以及它是否根树。虽然它可以接收任何指针,向函数传递一个并不指向树构件的指针也可能会引发问题。GtkTree*GTK_TREE_ROOT_TREE(gpointer obj)返回一个指向G t k Tr e e构件的指针的根节点树。上面的警告同样适用。GList*GTK_TREE_SELECTION(gpointer obj)返

21、回一个G t k Tr e e构件的根树的选择列表。上面的警告同样适用。12.2 树项构件GtkTreeItem树项构件和分栏列表项构件一样,是从 G t k I t e m构件派生而来的,而 G t k I t e m是从G t k B i n构件派生而来的,因此,G t k Tr e e I t e m是一种普通的容器,它只能包含一个子构件,且子构件可以是任何类型的。树项构件有一些额外的域,我们唯一需要关心的是s u b t r e e子树域。Tr e e I t e m结构的定义是下面这样的:struct _GtkTreeItemGtkItem item;GtkWidget*subtre

22、e;GtkWidget*pixmaps_box;GtkWidget*plus_pix_widget,*minus_pix_widget;GList*pixmaps;guint expanded:1;p i x m a p s _ b o x域是一个事件盒构件,它捕捉对“”或“”的点击,控制树的展开或折叠。p i x m a p域指向一个内部的数据结构。因为它总是可以使用 G T K _ T R E E _ I T E M _ S U B T R E E(I t e m)以一种相对安全的方式获得树项构件的 s u b t r e e域,因而最好不要对树项构件的内部进行操作,除非你确实知道你在做什

23、么。因为它是直接从G t k I t e m构件派生而来的,所以它可以用GTK_ITEM(TreeItem)宏转换为一个指针。树项通常带一个标签,因此可以用g t k _ l i s t _ i t e m _ n e w _ w i t h _ l a b e l()方便地创建新的树项。同样的效果可以用下面的代码获得。这些代码实际上是逐字从 gtk_tree_item_new_with _label()函数中复制而来:tree_item=gtk_tree_item_new();label_widget=gtk_label_new(label);gtk_misc_set_alignment(G

24、TK_MISC(label_widget),0.0,0.5);gtk_container_add(GTK_CONTAINER(tree_item),label_widget);gtk_widget_show(label_widget);因为上面的方法并不是强制性地将标签构件添加到树项里面,所以可以将一个水平组装盒构件(G t k H B o x)或箭头构件(G t k A r r o w)甚至一个笔记本构件(G t k N o t e b o o k)(虽然这样应用程序看起来会很奇怪)添加到树项中。如果从一个子树中删除所有的树项,则这些树项会被销毁,并与子树解除父子关系,除非事前引用它。上层的

25、树项会折叠起来,所以如果想要保留这些这些树项,应该做下面的工作:gtk_widget_ref(tree);owner=GTK_TREE(tree)-tree_owner;gtk_container_remove(GTK_CONTAINER(tree),item);if(tree-parent=NULL)gtk_tree_item_expand(GTK_TREE_ITEM(owner);gtk_tree_item_set_subtree(GTK_TREE_ITEM(owner),tree);e l s egtk_widget_unref(tree);可以对树项进行“拖放”,但要保证满足下面的条件

26、:当调用 g t k _ w i d g e t _ d n d _ d r a g _ s e t()或g t k _ w i d g e t _ d n d _ d r o p _ s e t()函数时要拖曳的树项和放下的树项都已经添加到一个树上,并且每一个父构件都有自己的父构件,一直到顶级窗口或对话框窗口为止。否则,会发生很奇怪的事。12.2.1 信号树项构件G t k Tr e e I t e m从G t k I t e m构件中继承了s e l e c t、d e s e l e c t和toggle 信号。另外,它添加了两个自己的信号:e x p a n d和c o l l a p

27、 s e。void select(GtkItem*tree_item);当一个i t e m要被选中时引发这个信号,当用户点击它后也会引发,或当应用程序调用g t k _ t r e e _ i t e m _ s e l e c t()、g t k _ i t e m _ s e l e c t()或g t k _ t r e e _ s e l e c t _ c h i l d()函数时。void deselect(GtkItem*tree_item);当取消选择树项时,或当用户在一个已选中的树项上点击时,会引发这个信号;当应用程序调用 g t k _ t r e e _ i t e m

28、 _ d e s e l e c t()或g t k _ i t e m _ d e s e l e c t()函数时也会引发该信号。对树项来说,在调用 g t k _ t r e e _ u n s e l e c t _ c h i l d()和g t k _ t r e e _ s e l e c t _ c h i l d()函数时,也会引发该信号。void toggle(GtkItem*tree_item);当应用程序调用g t k _ i t e m _ t o g g l e()函数时,引发这个信号。效果是:如果该树项有一个父树的话,在树项上引发这个信号时,对树项的父树调用 g

29、t k _ t r e e _ s e l e c t _ c h i l d()(绝不会调用g t k _ t r e e _ u n s e l e c t _ c h i l d()函数);如果没有父树,高亮显示会反过来。void expand(GtkTreeItem*tree_item);当要展开一个树项的子树时,将引发整个信号。也就是当用户点击树项旁边的“”时,或当应用程序调用g t k _ t r e e _ i t e m _ e x p a n d()函数时引发。void collapse(GtkTreeItem*tree_item);当一个树项的子树要折叠时,引发这个信号。也

30、就是,当用户点击树项旁边的“”,或当应用程序调用g t k _ t r e e _ i t e m _ c o l l a p s e()函数时引发。第1 2章树构件使用209下载12.2.2 函数和宏guint gtk_tree_item_get_type(void);返回“G t k Tr e e I t e m”的类型标识符。GtkWidget*gtk_tree_item_new(void);创建新的树项构件G t k Tr e e I t e m。返回一个指向G t k Wi d g e t对象的指针。如果创建失败,将返回N U L L。GtkWidget*gtk_tree_item_

31、new_with_label(gchar *label);创建一个新的树项对象,该对象有一个唯一的子构件 G t k L a b e l。返回一个指向G t k Wi d g e t对象的指针。如果创建失败,则返回 N U L L。void gtk_tree_item_select(GtkTreeItem*tree_item);这个函数是gtk_item_select(GTK_ITEM(tree_item)函数的一个封装,调用它时会引发s e l e c t信号。void gtk_tree_item_deselect(GtkTreeItem*tree_item);这个函数基本上是gtk_ite

32、m_deselect(GTK_ITEM(tree_item)函数调用的一个封装。调用此函数时会引发d e s e l e c t信号。void gtk_tree_item_set_subtree(GtkTreeItem*tree_item,GtkWidget *subtree);这个函数将一个子树s u b t r e e添加到树项t r e e _ i t e m上。如果t r e e _ i t e m是展开的,会显示该子树;如果t r e e _ i t e m是折叠的,会隐藏该子树。还有,t r e e _ i t e m必须已经添加到树上。void gtk_tree_item_rem

33、ove_subtree(GtkTreeItem*tree_item);删除树项的子树的所有树项(解除引用,然后销毁它,从子树向下一直到最末端的树项),然后删除该子树,并隐藏“/”符号。void gtk_tree_item_expand(GtkTreeItem*tree_item);使树项t r e _ i t e m引发e x p a n d信号,展开该树项。void gtk_tree_item_collapse(GtkTreeItem*tree_item);使树项t r e e _ i t e m引发c o l l a p s e信号,将该树项折叠。GtkTreeItem*GTK_TREE_

34、ITEM(gpointer obj)将一个指针转换为G t k TreeItem*。GtkTreeItemClass*GTK_TREE_ITEM_CLASS(gpointer obj)将一个指针转换为G t k Tr e e I t e m C l a s s类。gint GTK_IS_TREE_ITEM(gpointer obj)判定一个普通指针是否指向一个G t k Tr e e I t e m对象。GtkWidget GTK_TREE_ITEM_SUBTREE(gpointer obj)返回一个树项的子树(o b j参数应该是指向一个G t k Tr e e I t e m对象的指针)。

35、12.3 树构件示例下面的代码是树构件的一个示例。它在窗口中添加了一个树构件,并为所有相关对象的信号设置了回调函数。尝试一下,看看这些信号是怎样引发的,能用来做些什么。/*树构件示例开始tree.c*/210使第二部分 Linux编程常用C语言函数库及构件库下载第1 2章树构件使用211下载#include/*for all the GtkItem:and GtkTreeItem:signals*/static void cb_itemsignal(GtkWidget*item,gchar*signame)gchar*name;GtkLabel*label;/*它是从G t k B i n派生

36、而来,所以它只能有一个子构件*/label=GTK_LABEL(GTK_BIN(item)-child);/*取得标签的文本*/gtk_label_get(label,&name);/*获取树项所在树的层次*/g_print(%s called for item%s-%p,level%dn,signame,name,item,GTK_TREE(item-parent)-level);/*注意,这个函数没有被调用过*/static void cb_unselect_child(GtkWidget*root_tree,GtkWidget*child,GtkWidget*subtree)g_prin

37、t(unselect_child called for root tree%p,subtree%p,child%pn,root_tree,subtree,child);/*注意这个函数在用户点击树项时调用,不管它是否已经被选中*/static void cb_select_child(GtkWidget*root_tree,GtkWidget*child,GtkWidget*subtree)g_print(select_child called for root tree%p,subtree%p,child%pn,root_tree,subtree,child);static void cb_

38、selection_changed(GtkWidget*tree)GList*i;g_print(selection_change called for tree%pn,tree);g_print(selected objects are:n);i=GTK_TREE_SELECTION(tree);while(i)gchar*name;GtkLabel*label;GtkWidget*item;/*从列表节点获得一个指向G t k W i d g e t类型的指针*/item=GTK_WIDGET(i-data);label=GTK_LABEL(GTK_BIN(item)-child);gtk

39、_label_get(label,&name);g_print(t%s on level%dn,name,GTK_TREE(i t e m-p a r e n t)-l e v e l);212使第二部分 Linux编程常用C语言函数库及构件库下载i=i-next;int main(int argc,char*argv)GtkWidget*window,*scrolled_win,*tree;static gchar*itemnames=Foo,Bar,Baz,Quux,M a u r i c e ;gint i;gtk_init(&argc,&argv);/*a generic toplev

40、el window*/window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_signal_connect(GTK_OBJECT(window),delete_event,GTK_SIGNAL_FUNC(gtk_main_quit),NULL);gtk_container_set_border_width(GTK_CONTAINER(window),5);/*创建一个滚动窗口*/scrolled_win=gtk_scrolled_window_new(NULL,NULL);gtk_scrolled_window_set_policy(GTK_SCROLLE

41、D_WINDOW(scrolled_win),G T K _ P O L I C Y _ A U T O M A T I C,G T K _ P O L I C Y _ A U T O M A T I C);gtk_widget_set_usize(scrolled_win,150,200);gtk_container_add(GTK_CONTAINER(window),scrolled_win);gtk_widget_show(scrolled_win);/*创建一个根树*/tree=gtk_tree_new();g_print(root tree is%pn,tree);/*connect

42、 all GtkTree:signals*/gtk_signal_connect(GTK_OBJECT(tree),select_child,GTK_SIGNAL_FUNC(cb_select_child),tree);gtk_signal_connect(GTK_OBJECT(tree),unselect_child,GTK_SIGNAL_FUNC(cb_unselect_child),tree);gtk_signal_connect(GTK_OBJECT(tree),selection_changed,GTK_SIGNAL_FUNC(cb_selection_changed),tree);

43、/*将这个树加到滚动窗口中*/gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_win),t r e e);/*设置选择模式*/gtk_tree_set_selection_mode(GTK_TREE(tree),G T K _ S E L E C T I O N _ M U L T I P L E);/*显示树构件*/gtk_widget_show(tree);for(i=0;i item%s-%p,subtree%pn,itemnamesi,item,s u b t r e e);/*如果想要这些信号对子树

44、的子构件也起作用,下面的代码就是必要的。*注意,s e l e c t i o n _ c h a n g e 信号总会在根树上引发*/gtk_signal_connect(GTK_OBJECT(subtree),select_child,GTK_SIGNAL_FUNC(cb_select_child),subtree);gtk_signal_connect(GTK_OBJECT(subtree),unselect_child,GTK_SIGNAL_FUNC(cb_unselect_child),subtree);/*下面一句代码没有效果,因为对子树来说,它已经被全部忽略了。*/gtk_tre

45、e_set_selection_mode(GTK_TREE(subtree),G T K _ S E L E C T I O N _ S I N G L E);/*下面的代码也没有作用,不过理由与上面不一样:*树构件的 v i e w _ m o d e 和 v i e w _ l i n e 值是从根*树开始从上往下传递的,所以,在后面设置有可能*会产生不可预料的结果*/gtk_tree_set_view_mode(GTK_TREE(subtree),GTK_TREE_VIEW_ITEM);/*设置树项的子树。注意,只有将树项加到父树上之后才能做这件事*/gtk_tree_item_set_

46、subtree(GTK_TREE_ITEM(item),subtree);for(j=0;j -item%s-%pn,itemnamesj,subitem);/*将它加到父树构件上*/gtk_tree_append(GTK_TREE(subtree),subitem);/*显示这个构件*/gtk_widget_show(subitem);/*显示窗口,然后进入主循环*/gtk_widget_show(window);g t k _ m a i n();return 0;/*示例结束*/此示例的运行结构如图1 2-1所示。214使第二部分 Linux编程常用C语言函数库及构件库下载图12-1 树构件示例

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁