读书人

怎么自定义给VC++ CTreeCtrl控件节点排

发布时间: 2012-08-03 00:12:14 作者: rapoo

如何自定义给VC++ CTreeCtrl控件节点排序
我想实现一个像QQ列表一样的树形结构列表,里边节点总共有4种图标,如图:
我先实现将文件夹排在最前面,接着是彩色图标,最后才是灰色图标,求大牛们指点,给分保证跟上


[解决办法]
图片挂了。。先上传到CSDN相册,然后在插入图片的地址就能显示了 !!


[解决办法]
给树形控件的节点指向一个自定义的数据结构, 排序只要对自定义的数据结构排序即可,然后将树形控件刷新即可。
[解决办法]
如果是动态的,简单点可以调CTreeCtrl的SortChildrenCB,通过一个回调函数定义排序规则:

C/C++ code
int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort){   //把该函数换成自己的规则   CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*)lParamSort;   CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam1);   CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam2);   return strItem2.Compare(strItem1);}TVSORTCB tvs;tvs.hParent = TVI_ROOT;tvs.lpfnCompare = MyCompareProc;tvs.lParam = (LPARAM)&m_TreeCtrl;m_TreeCtrl.SortChildrenCB(&tvs);
[解决办法]
定义一个链表结构 把所有的节点的句柄全部存储到链表中 并有对应的序号
当有新节点时先判断其应在的位置,然后在链表通过序号中找到他前一个节点的句柄
然后用
CTreeCtrl::InsertItem()时将最后一个参数hInsertAfter 设置为前一个节点的句柄就行了
在链表中将其插入进去,前面的节点序号不变 后面的节点序号+1
[解决办法]
探讨
这个我也试过,tree item data值我已经使用了,但是lParam1和lParam2是连个节点的data值,怎么才能取到与它们对应的节点呢?

[解决办法]
在析构里 先DeleteAllItems 在删链表试试

读书人网 >VC/MFC

热点推荐