設定しツリーステート2008年6月7日14時37分

CTreeCtrlのコントロールのチェックボックスのオプションを設定する方法、これは難しい問題だった、一つが選択され、一つは親ノードが子ノードの状態を選択した場合にどのように、選択されないのだろうか?その状態の親ノードというサブ状態を設定しますか?私はそれがどのように実装されるか参照してください。

/ *
 *特長:設定し、選択ボックスツリー(二次ディレクトリ)を選択解除
 *日付:080606
 *著者:ナイトホーク
 * /

* m_GroupTree CTreeCtrlのにextern、
ボイドCheckTreeItem(HTRREITEMアイテム、BOOLチェック)
{
 現在のエントリが、親が親ノードである場合、親ノードは子ノードに対し、NULLであるか否か//判定する
 。HTRREITEM親= m_GroupTree-> getParentItem(項目)
 IF(親== NULL)
 {
  //)子ノードのステータスを設定(または非選択された選択
  HTRREITEM子= m_GroupTree-> GetChildItem(項目);
  一方、(子)
  {
   m_GroupTree-> SETCHECK(子、チェック);
   子= m_GroupTree- > GetNextSiblingItem(子);兄弟の//取得子ノード
  }
 }
 他
 {
  BOOLチェック= FALSE;状態のすべての子ノードがあった場合//
  BOOL TCheck = FALSE; //現在の状態(オンまたはオフ)
  BOOL PCheck = FALSE; //親ノード(オンまたはオフ)
  PCheck = m_GroupTree-> GetCheck(親)。
  = m_GroupTree-> GetChildItem HTRREITEM兄弟(親 ); // 子ノードが取得
  ん
  {
   Tcheck = m_GroupTree-> GetCheck(兄弟)は、
   親と子ノードと着信一貫性のある状態の//現在の状態か否か、
   //、一致しません着信の状態とは逆親ノードの状態を設定
   IF(!! && Tcheck = PCheck =状況チェック)
   {
    ;検査は= FALSE
    m_GroupTree-> SETCHECK(親、チェック!);
    BREAK;
   }
   チェックは= TRUE;
  }一方(兄弟);
  IF(チェック)//一貫性のある状態のすべてのバイト・ポイント・ノードは、親ノードと子一貫性のある状態に置くように配置されている場合
  、{
   m_GroupTree-> SETCHECK(親、チェックを);
  }
  IF(PCheck &&チェック)//もし!選択された親ノードと子ノードは、状態とは異なる親ノードを有し、親ノードが子ノードの状態に置くように配置されている
  {
   m_GroupTree-> SETCHECK(親、チェック);
  }
 }
}

おすすめ

転載: www.cnblogs.com/lu-ping-yin/p/10988710.html