您的位置:首页 > 其它

MFC 树控件 如何为二级节点动态地添加三、四级节点

2017-07-31 18:17 411 查看
现函数功能是要为一个二级节点添加对应的三、四级节点:

//判断一个str是不是在vec容器中,str为所选择项的文本,vec为存储已经选择的BHID字符串容器
bool CDialogModelTree::IsOrNotInVector(CString str, vector<CString> &vec)
{
if (vec.size()!=0)
{
for (int i=0;i<vec.size();++i)
{
if (str==vec[i])
{
return true;
}
}
return false;
}
}


/*----AddTFItem(CTreeCtrl &m_treectrl,HTREEITEM hTreeItem,CString ThreeItemName,CString FourItemName)-------
函数的功能:为树控件m_treectrl的二级结点hTreeItem添加三级节点ThreeItemName和四级节点FourItemName
函数的参数定义:m_treectrl 树控件变量
hTreeItem 树控件的二级节点指针
ThreeItemName 要添加的三级节点文本
FourItemName 要添加的四级节点文本
----------------------------------------------------------------------------------------------------------*/
void CDialogModelTree::AddTFItem(CTreeCtrl &m_treectrl,HTREEITEM hTreeItem,CString ThreeItemName,CString FourItemName)
{
HTREEITEM hTreeItemChlid=m_treectrl.GetChildItem(hTreeItem);//得到二级节点hTreeItem的子节点
HTREEITEM temp_t;
vector<CString> tempthree;//存储所有的三级节点文本
tempthree.clear();
tempthree.shrink_to_fit();
if (hTreeItemChlid==NULL)//如果二级节点hTreeItem没有子节点,就重新创建它的三级节点和四级节点
{
HTREEITEM threeItem=m_treectrl.InsertItem(TEXT(ThreeItemName),2,2,hTreeItem);//先在二级节点hTreeItem下创建三级节点ThreeItemNam
HTREEITEM fourItem=m_treectrl.InsertItem(TEXT(FourItemName),3,3,threeItem);//再在三级节点ThreeItemName下创建四级节点FourItemName
}
else
{
while (hTreeItemChlid!=NULL)
{
CString temp=m_treectrl.GetItemText(hTreeItemChlid);//获取子节点上的文本
//AfxMessageBox(temp);
if (temp==ThreeItemName)//如果已经存在三级节点ThreeItemName,就保存对应的三级节点指针
{
temp_t=hTreeItemChlid;
}
tempthree.push_back(temp);//将二级节点的子节点文本压入容器中

hTreeItemChlid=m_treectrl.GetNextSiblingItem(hTreeItemChlid);//得到二级子节点的兄弟节点
}
if (IsOrNotInVector(ThreeItemName,tempthree))//判断是否存在要添加的三级节点
{
HTREEITEM fourItem=m_treectrl.InsertItem(TEXT(FourItemName),3,3,temp_t);//先在二级节点temp_t下创建三级节点ThreeItemNam
}
else
{
HTREEITEM threeItem=m_treectrl.InsertItem(TEXT(ThreeItemName),2,2,hTreeItem);//先在二级节点hTreeItem下创建三级节点ThreeItemNam
HTREEITEM fourItem=m_treectrl.InsertItem(TEXT(FourItemName),3,3,threeItem);//再在三级节点ThreeItemName下创建四级节点FourItemName
}
}
tempthree.clear();//清空
tempthree.shrink_to_fit();//释放内存
}


注意:使用vector要记得头文件中要有#include <vector>。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: