谁给我个用CMarkup类将树形控件的树存入xml中的函数
不要理论,我看了很多。 我自己用遍历写了一个可以将xml文件导入树的 但是反过来真心不知道怎么实现 跪求 大神帮助(格式我知道自己转换 只要将树上对应的节点添加到xml中 就好~~~)
[解决办法]
主要是设计好递归函数
以下代码供参考
void CJARI_MultiTreeCtrl::TravelChild(HTREEITEM hItem, int nState)
{
HTREEITEM hChildItem, hBrotherItem;
//查找子节点,没有就结束
hChildItem = GetChildItem(hItem);
if(hChildItem != NULL)
{
//设置子节点的状态与当前节点的状态一致
CTreeCtrl::SetItemState( hChildItem, INDEXTOSTATEIMAGEMASK(nState), TVIS_STATEIMAGEMASK );
//再递归处理子节点的子节点和兄弟节点
TravelChild(hChildItem, nState);
//处理子节点的兄弟节点和其子节点
hBrotherItem = GetNextSiblingItem(hChildItem);
while (hBrotherItem)
{
//设置子节点的兄弟节点状态与当前节点的状态一致
int nState1 = GetItemState( hBrotherItem, TVIS_STATEIMAGEMASK ) >> 12;
if(nState1 !=0 )
{
CTreeCtrl::SetItemState( hBrotherItem, INDEXTOSTATEIMAGEMASK(nState), TVIS_STATEIMAGEMASK );
}
//再递归处理子节点的兄弟节点的子节点和兄弟节点
TravelChild(hBrotherItem, nState);
hBrotherItem = GetNextSiblingItem(hBrotherItem);
}
}
}
[解决办法]
我到是认为要设计好数据结构
//构建xml,添加新的job//典型的配置好任务添加到历史管理菜单的时候可以调用这个接口void JobCRWXml::BuildXmlTree( Job &job ){ HANDLE root; HANDLE father; std::map<int , HANDLE> elements; //判断是否是根节点 if(! (father = root = m_xml.GetRootElement())) { //不存在就建立根节点 m_xml.AddRootElement(ROOTNODE); father = root = m_xml.GetRootElement(); } //获取数据结构中的数据 std::multiset<FuncTreeLevel>& treeLevelSet = job.treeLevelSet; std::multiset<FuncTreeLevel>::iterator itr = treeLevelSet.begin(); father = m_xml.AddChildElement(father,_T("job"),_T("name"),job.jobname); HANDLE element; ParaMap::iterator itr_para; TCHAR buffer[65]; //根据任务数据量,写入XML while(itr != treeLevelSet.end()) { /*if(itr->fid != INVALID_DEPENDENCYID) father = elements[itr->fid]; elements[itr->fid] = */ //写子参数 element = m_xml.AddChildElement(father,_T("task"),TASKTYPESTRING,_itoa(itr->tbase->taskType,buffer,10) ); m_xml.AddChildElementValue(element,_T("taskname"),(*itr).tbase->taskName ); m_xml.AddChildElementValue(element,_T("priority"),_itoa((*itr).tbase->priority,buffer,10 )); m_xml.AddChildElementValue(element,_T("timeOut"),_itoa((*itr).tbase->timeOutSecond,buffer,10) ); m_xml.AddChildElementValue(element,_T("id"),_itoa((*itr).tbase->id ,buffer,10)); m_xml.AddChildElementValue(element,_T("dependentId"),_itoa((*itr).tbase->dependentId ,buffer,10)); m_xml.AddChildElementValue(element,_T("relyonData"),_itoa((*itr).tbase->relyOnData ,buffer,10)); m_xml.AddChildElementValue(element,_T("beRelyonData"),_itoa((*itr).tbase->beRelyOnData ,buffer,10)); m_xml.AddChildElementValue(element,_T("relyOnTaskName"),(*itr).tbase->relyOnTaskName ); m_xml.AddChildElementValue(element,_T("level"),_itoa((*itr).level ,buffer,10)); //FuncTreeLevel& ft = (FuncTreeLevel&)*itr; itr_para = ((FuncTreeLevel&)(*itr)).paramap.begin(); while ( itr_para != itr->paramap.end() ) { m_xml.AddChildElementValue(element,itr_para->first,itr_para->second); itr_para++; } itr++; }}