WEB开发网
开发学院软件开发VC 三态选择树实现终结者 阅读

三态选择树实现终结者

 2007-10-05 20:22:20 来源:WEB开发网   
核心提示:②递归搜索兄、父节点void CMutiTreeCtrl::TravelSiblingAndParent(HTREEITEM hItem, int nState){ HTREEITEM hNextSiblingItem,hPrevSiblingItem,hParentItem; //查找父节点,没有就结束 hPare

②递归搜索兄、父节点void CMutiTreeCtrl::TravelSiblingAndParent(HTREEITEM hItem, int nState)
{
   HTREEITEM hNextSiblingItem,hPrevSiblingItem,hParentItem;
  
   //查找父节点,没有就结束
   hParentItem=GetParentItem(hItem);
   if(hParentItem!=NULL)
   {
     int nState1=nState;//设初始值,防止没有兄弟节点时出错
    
     //查找当前节点下面的兄弟节点的状态
     hNextSiblingItem=GetNextSiblingItem(hItem);
     while(hNextSiblingItem!=NULL)
     {
       nState1 = GetItemState( hNextSiblingItem, TVIS_STATEIMAGEMASK ) >> 12;
       if(nState1!=nState && nState1!=0) break;
       else hNextSiblingItem=GetNextSiblingItem(hNextSiblingItem);
     }
    
     if(nState1==nState)
     {
       //查找当前节点上面的兄弟节点的状态
       hPrevSiblingItem=GetPrevSiblingItem(hItem);
       while(hPrevSiblingItem!=NULL)
       {
         nState1 = GetItemState(hPrevSiblingItem,TVIS_STATEIMAGEMASK)>> 12;
         if(nState1!=nState && nState1!=0) break;
         else hPrevSiblingItem=GetPrevSiblingItem(hPrevSiblingItem);
       }
     }
    
     if(nState1==nState || nState1==0)
     {
       nState1 = GetItemState( hParentItem, TVIS_STATEIMAGEMASK ) >> 12;
       if(nState1!=0)
       {
         //如果状态一致,则父节点的状态与当前节点的状态一致
         CTreeCtrl::SetItemState( hParentItem,
           INDEXTOSTATEIMAGEMASK(nState), TVIS_STATEIMAGEMASK );
       }
       //再递归处理父节点的兄弟节点和其父节点
       TravelSiblingAndParent(hParentItem,nState);
     }
     else
     {
       //状态不一致,则当前节点的父节点、父节点的父节点……状态均为第三态
       hParentItem=GetParentItem(hItem);
       while(hParentItem!=NULL)
       {
         nState1 = GetItemState( hParentItem, TVIS_STATEIMAGEMASK ) >> 12;
         if(nState1!=0)
         {
           CTreeCtrl::SetItemState( hParentItem,
             INDEXTOSTATEIMAGEMASK(2), TVIS_STATEIMAGEMASK );
         }
         hParentItem=GetParentItem(hParentItem);
       }
     }
   }  
}

好了,一切就是这么简单,如果你还不清楚的话,那就打开工程看看吧,如你有什么问题也不要忘记来信告诉我哦!最后祝大家学习愉快,多多交流,多多进步,一切顺利!

上一页  1 2 3 4 5 

Tags:选择 实现 终结者

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接