yossikally
asked on
Wanted: A function to traverse a populated tree control
Any of you folks has got such a function?
It is a CTreeCtrl that is a member of my own 'CMyTree' class.
It looks like a simple cookbook thing - traversing the tree, perhaps for printing out its contents.
It is a CTreeCtrl that is a member of my own 'CMyTree' class.
It looks like a simple cookbook thing - traversing the tree, perhaps for printing out its contents.
ASKER
I know this article, and it's not what I meant. It shows you how to extract the path to one specific node, and I want to traverse the whole tree.
Maybe the article can be adapted to do what I want, and eventually I may do it, but I wanted to save me some work.
Maybe the article can be adapted to do what I want, and eventually I may do it, but I wanted to save me some work.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Maybe this can help you:
HTREEITEM CTreeCtrlEx::GetNextItemEx (HTREEITEM hItemPara)
{
HTREEITEM hItem = GetChildItem(hItemPara);
if (hItem) return hItem;
hItem = GetNextSiblingItem(hItemPa ra);
if (hItem) return hItem;
HTREEITEM hParent = hItemPara;
while (!hItem)
{
hParent = GetParentItem(hParent);
if (!hParent) return NULL; // We are at the root (that has no parent)
hItem = GetNextSiblingItem(hParent );
}
return hItem;
}
And maybe you find these ones also interesting:
////////////////////////// ////////// ////////// ////////// ////////// ////////// ///
// Helpers to list out selected items. (Use similar to GetFirstVisibleItem(),
// GetNextVisibleItem() and GetPrevVisibleItem()!)
HTREEITEM CTreeCtrlEx::GetFirstSelec tedItem()
{
for ( HTREEITEM hItem = GetRootItem(); hItem!=NULL; hItem = GetNextVisibleItem( hItem ) )
if ( GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED )
return hItem;
return NULL;
}
HTREEITEM CTreeCtrlEx::GetNextSelect edItem( HTREEITEM hItem )
{
for ( hItem = GetNextVisibleItem( hItem ); hItem!=NULL; hItem = GetNextVisibleItem( hItem ) )
if ( GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED )
return hItem;
return NULL;
}
HTREEITEM CTreeCtrlEx::GetPrevSelect edItem( HTREEITEM hItem )
{
for ( hItem = GetPrevVisibleItem( hItem ); hItem!=NULL; hItem = GetPrevVisibleItem( hItem ) )
if ( GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED )
return hItem;
return NULL;
}
Success.
HTREEITEM CTreeCtrlEx::GetNextItemEx
{
HTREEITEM hItem = GetChildItem(hItemPara);
if (hItem) return hItem;
hItem = GetNextSiblingItem(hItemPa
if (hItem) return hItem;
HTREEITEM hParent = hItemPara;
while (!hItem)
{
hParent = GetParentItem(hParent);
if (!hParent) return NULL; // We are at the root (that has no parent)
hItem = GetNextSiblingItem(hParent
}
return hItem;
}
And maybe you find these ones also interesting:
//////////////////////////
// Helpers to list out selected items. (Use similar to GetFirstVisibleItem(),
// GetNextVisibleItem() and GetPrevVisibleItem()!)
HTREEITEM CTreeCtrlEx::GetFirstSelec
{
for ( HTREEITEM hItem = GetRootItem(); hItem!=NULL; hItem = GetNextVisibleItem( hItem ) )
if ( GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED )
return hItem;
return NULL;
}
HTREEITEM CTreeCtrlEx::GetNextSelect
{
for ( hItem = GetNextVisibleItem( hItem ); hItem!=NULL; hItem = GetNextVisibleItem( hItem ) )
if ( GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED )
return hItem;
return NULL;
}
HTREEITEM CTreeCtrlEx::GetPrevSelect
{
for ( hItem = GetPrevVisibleItem( hItem ); hItem!=NULL; hItem = GetPrevVisibleItem( hItem ) )
if ( GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED )
return hItem;
return NULL;
}
Success.
did you look at this:
http://www.codeguru.com/treeview/TreeTraversal.shtml
?