CTreeCtrl利用TV_ITEM插入节点与遍历节点
2015-07-30 11:22
211 查看
插入树节点
TV_ITEM tvItem;
tvItem.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_HANDLE | TVIF_SELECTEDIMAGE | TVIS_SELECTED | TVIS_EXPANDED;
CString TmpStr = "文本内容"
tvItem.pszText =(LPWSTR)(LPCTSTR)TmpStr;
tvItem.cchTextMax = MAX_PATH;
tvItem.lParam =nID; //额外参数
tvItem.iImage =0; //未被选中时显示的图片
tvItem.iSelectedImage = 1; //选中时显示的图片
TV_INSERTSTRUCT tvInsert;
tvInsert.hParent = ParentNode; //确定父节点
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.item = tvItem;
HTREEITEM RetItm = m_tree.InsertItem(&tvInsert);
//遍历树节点,代码为获得树控件节点的item.lparam
GetChildItemID(CTreeCtrl* pCtrlTree,HTREEITEM& hNode)
{
TVITEM item;
item.mask = TVIF_PARAM;
if (pCtrlTree->ItemHasChildren(hNode))//是否有孩子节点
{
HTREEITEM hNextItem;
HTREEITEM hChildItem = pCtrlTree->GetChildItem(hNode);
while (hChildItem != NULL)
{
hNextItem = pCtrlTree->GetNextItem(hChildItem, TVGN_NEXT);
item.hItem = hChildItem;
pCtrlTree->GetItem(&item);
//得到item.lParam
GetChildOrgID(pCtrlTree,hChildItem);//遍历
hChildItem = hNextItem;
}
}
}
//遍历添加节点
AddTreeItem(CTreeCtrl* pCtrlTree,HTREEITEM& ParentNode, const int nParentID)
{
int nCount=m_OrgArr.size();//m_OrgArr是一个vector<int>类型的数组
HTREEITEM RetItm;
for(int i=0;i<nCount;i++)
{
XXX* pObj = (XXX*)(int)m_OrgArr.at(i);
if(pObj->nParentID==nParentID)//满足要求就插入了
{
TV_ITEM tvItem;
tvItem.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_HANDLE | TVIF_SELECTEDIMAGE | TVIS_SELECTED | TVIS_EXPANDED;
CString TmpStr = pObj->sTest; //(LPSTR)
tvItem.pszText =(LPWSTR)(LPCTSTR)TmpStr;
tvItem.cchTextMax = MAX_PATH;
tvItem.lParam =pObj->nID;
tvItem.iImage =0;
tvItem.iSelectedImage = 1;
TV_INSERTSTRUCT tvInsert;
tvInsert.hParent = ParentNode;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.item = tvItem;
HTREEITEM RetItm = pCtrlTree->InsertItem(&tvInsert);
AddTreeItem(pCtrlTree,RetItm,pObj->nID);
}
}
}
TV_ITEM tvItem;
tvItem.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_HANDLE | TVIF_SELECTEDIMAGE | TVIS_SELECTED | TVIS_EXPANDED;
CString TmpStr = "文本内容"
tvItem.pszText =(LPWSTR)(LPCTSTR)TmpStr;
tvItem.cchTextMax = MAX_PATH;
tvItem.lParam =nID; //额外参数
tvItem.iImage =0; //未被选中时显示的图片
tvItem.iSelectedImage = 1; //选中时显示的图片
TV_INSERTSTRUCT tvInsert;
tvInsert.hParent = ParentNode; //确定父节点
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.item = tvItem;
HTREEITEM RetItm = m_tree.InsertItem(&tvInsert);
//遍历树节点,代码为获得树控件节点的item.lparam
GetChildItemID(CTreeCtrl* pCtrlTree,HTREEITEM& hNode)
{
TVITEM item;
item.mask = TVIF_PARAM;
if (pCtrlTree->ItemHasChildren(hNode))//是否有孩子节点
{
HTREEITEM hNextItem;
HTREEITEM hChildItem = pCtrlTree->GetChildItem(hNode);
while (hChildItem != NULL)
{
hNextItem = pCtrlTree->GetNextItem(hChildItem, TVGN_NEXT);
item.hItem = hChildItem;
pCtrlTree->GetItem(&item);
//得到item.lParam
GetChildOrgID(pCtrlTree,hChildItem);//遍历
hChildItem = hNextItem;
}
}
}
//遍历添加节点
AddTreeItem(CTreeCtrl* pCtrlTree,HTREEITEM& ParentNode, const int nParentID)
{
int nCount=m_OrgArr.size();//m_OrgArr是一个vector<int>类型的数组
HTREEITEM RetItm;
for(int i=0;i<nCount;i++)
{
XXX* pObj = (XXX*)(int)m_OrgArr.at(i);
if(pObj->nParentID==nParentID)//满足要求就插入了
{
TV_ITEM tvItem;
tvItem.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_HANDLE | TVIF_SELECTEDIMAGE | TVIS_SELECTED | TVIS_EXPANDED;
CString TmpStr = pObj->sTest; //(LPSTR)
tvItem.pszText =(LPWSTR)(LPCTSTR)TmpStr;
tvItem.cchTextMax = MAX_PATH;
tvItem.lParam =pObj->nID;
tvItem.iImage =0;
tvItem.iSelectedImage = 1;
TV_INSERTSTRUCT tvInsert;
tvInsert.hParent = ParentNode;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.item = tvItem;
HTREEITEM RetItm = pCtrlTree->InsertItem(&tvInsert);
AddTreeItem(pCtrlTree,RetItm,pObj->nID);
}
}
}
相关文章推荐
- debian 8.1 (jessie) 安装 postgresql
- strcmp的思考与折腾
- iOS获取唯一标识
- FLANNConfig.cmake
- cocos2d-x 架构之应用程序架构
- jenkins相关链接
- LeetCode206:Reverse Linked List
- 基于keepalived双主模型的高可用LVS
- CSS3属性box-shadow使用教程
- WS-*服务
- 剖析Disruptor:为什么会这么快?(三)揭秘内存屏障
- html5之拖放
- MySQL常见查询语句
- android 5.1 wifi direct / wifi P2P 扫描过程
- Mac OS X设置PATH环境变量
- Android文件访问权限
- dispaly:-webkit-box 布局中的坑
- 在eclipse中打开文件所在的目录
- Spring MVC-ContentNegotiatingViewResolver 多视图返回
- 消除游戏联通SDK对接