CTreeView häkchen automatisch setzen

Eadghe

Grünschnabel
hi leute,
das ist mein erster post, hab aber schon so einige hilfe duch das lesen von beiträgen bekommen ;).

meine frage:

ich mochte ein TreeView so verwenden, dass wenn ich ein element welches eine rootknoten hat, an oder aus checke die checkbox im rootknoten mitverändert wird. andersrum, wenn ich die checkbox eines rootknotens anklicke sollen die checkboxen aller unterknoten an oder ausgestellt werden.

bsp. ich hab eine rootknoten mit 3 unterknoten. sind alle an soll der rootknoten auch an sein. sind alle aus soll der rootknoten auch aus sein. wenn nur ein paar an sind soll der rootknoten an, aber ausgegraut sein.

wenn ich über die checkbox des rootknoten diesen an oder aus schalte sollen die unterknoten entsprechend an oder aus gehen.

ich hab das prinzip schon in einigen anwendungen gesehen, nur hab ich keine plan wie, oder ob ich das überhaupt umsetzen kann.
währe für hilfe dankbar.

greets
eadghe (oder woodi für joki ;))
 
Ein wunderschönes Beispiel für Rekursion. Du musst auf einen Mausklick hin (soweit ich weiss, muss man da über WM_LBUTTONDOWN gehen) prüfen, ob eine Checkbox angeklickt worden ist. Wenn ja, prüfst du den Status und rufst dann deine rekursive Child-Item-Anhak-Routine auf:

Code:
void ChildItemsAnhaken( CTreeCtrl* pTree, HTREEITEM hClickedItem, BOOL bSetCheck )
{

  // das erste Child holen
  hClickedItem = pTree->GetChildItem( hClickedItem );
  while ( hClickedItem )
  {
    // Item anhaken
    pTree->SetCheck( hClickedItem, bSetCheck );
   
    // Childs dementsprechend anhaken
    ChildItemsAnhaken( pTree, hClickedItem, bSetCheck );

    // nächstes Child in derselben Ebene suchen
    hClickedItem = pTree->GetNextSiblingItem( hClickedItem );
  }

}
 
Zurück