我想在  CTreeCtrl  中  根据 父进程 和 子进程 的 关系 依次插入节点  我用了一个很麻烦的方法(穷举)实现了功能 请问  对于这种情况  正确应该用什么方法 来实现 
效果图 发不上来  参考下面
   - system process
      -  smss.exe
               csrss.exe
             - winlogon.exe
                 -  services.exe
                       svchost.exe
                       svchost.exe
                       svchost.exe
                       svchost.exe
                       svchost.exe
                       spoolsv.exe
                       svchost.exe
                    lsass.exe
                    taskmgr.exe
    - explorer.exe
         cftmon.exe
         QQ.exe
         deamon.exe
                     

解决方案 »

  1.   

    我有个递归算法,希望能对你有帮助。 递归展开所有树的节点diguiExpand(); void CLeftPaneView::diguiExpand(HTREEITEM TreeItem)
    {
    if(TreeItem   ==   NULL)   
    return;   
    while(TreeItem!=NULL)
    {
    if(m_Tree.ItemHasChildren(TreeItem))   
    {   
    m_Tree.Expand(TreeItem,TVE_EXPAND);   
    HTREEITEM   hChild   =   m_Tree.GetChildItem(TreeItem);   
    diguiExpand(hChild);   
    diguiExpand(m_Tree.GetNextSiblingItem(hChild));   
    }   
    TreeItem=m_Tree.GetNextSiblingItem(TreeItem);   
    }
    }
      

  2.   

    比如说吧,你想把一个Object.exe插到Woman.exe的下面(这句话比较邪恶)
    你又不知道Woman.exe是第几层,对吧?她不一定是顶层节点,那么这么做以下是伪代码
    Insert(string str,string target)
    {
       if(当前节点不是woman.exe)
       {
         找下一个  比如lsass.exe的下一个是taskmgr.exe
          Insert(str,下一个节点的名称);
          找她的女儿  explorer.exe的女儿有3个
           Insert(str,第一个女儿的名称);
        }
        else
           插进去
    }这就是递归