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:选择 实现 终结者

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