读书人

哪位高手给小弟我个用CMarkup类将树形

发布时间: 2012-09-13 09:51:53 作者: rapoo

谁给我个用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);
}
}
}
[解决办法]
我到是认为要设计好数据结构

C/C++ code
//构建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++;    }} 

读书人网 >VC/MFC

热点推荐