<向熟悉CTreeCtrl控件的朋友虚心请问>又一个棘手的有关问题
向熟悉CTreeCtrl控件的朋友虚心请教又一个棘手的问题?我在做一个加载所有磁盘文件到一个CTreeCtrl控件中
<向熟悉CTreeCtrl控件的朋友虚心请教>又一个棘手的问题?
我在做一个加载所有磁盘文件到一个CTreeCtrl控件中的程序,但一次遍历全部加载会花费大量时间,还会出现假死现象。
现在我的解决办法是一次只加载一层子项比如:
+dir
|-a
|-d
|-x
|-y
但下次遍历的时候不知道a,d,x,y那个是文件而哪个是文件夹,我的意思就是说能不能再加载的时候把文件的前面改成“+“
比如
+dir
|-a
|-d
|+x
|-y
此时相当于欺骗程序x下面有子项,好方便下次遍历。也不知道我说清楚了没- -lll
也可以这样说吧,如果一个空文件夹加入到节点下面,怎么把他前面设置为‘+’号,表示这四个文件夹,虽然下面没有文件。但用InsertItem(foundFileName,0,0,htParent,TVI_LAST)不能成功。
C/C++ code用HTREEITEM hRootItem,hUseItem;TV_ITEM tvItem;TV_INSERTSTRUCT TreeCtrlItem;tvItem.mask=TVIF_TEXT|TVIF_PARAM|TVIF_SELECTEDIMAGE;tvItem.pszText="a";tvItem.cChildren=1; // 直接告诉它有有子项? TreeCtrlItem.item=tvItem;TreeCtrlItem.hParent = TVI_ROOT;hRootItem=m_ListFile.InsertItem(&TreeCtrlItem);hUseItem=hRootItem;
谢谢
[解决办法]这个或许 可以参考 Shell 编程,不一定走你的这条路。
[解决办法]首先思路有问题了,不能一次便利完毕,首先只需要添加桌面下根节点的字节点,其余的在用户点+的时候再展开了。
需要的话,我给一个sample,你把你的email留下来了,呵呵!
[解决办法]每次展开一个节点时,查找并添加其子目录(及文件),对于每个子目录,可以在其下面添加一个子节点“.”,在展开时检查节点,如果有“.”这个子节点,就把该子节点删除,然后搜索对应的目录添加子节点。
[解决办法]插入节点的时候,可以将TVINSERTSTRUCT结构的TREEITEM成员中cChildren设置为I_CHILDRENCALLBACK,这样就可以在TVN_GETDISPINFO消息响应中决定是否有子节点,返回不同的值可以显示或者不显示+号。
而子节点的动态添加和删除(以减少内存占用和提高初始加载速度)可以参考MSDN中的文章:
Knowledge Base
HOWTO: Use cChildren of TV_ITEM to Add Speed & Use Less RAM
[解决办法]顶一下,正解!