Traversing an Entire Tree View's Hierarchy

WEBINAR: On-demand webcast

How to Boost Database Development Productivity on Linux, Docker, and Kubernetes with Microsoft SQL Server 2017 REGISTER >

In a tree control it often becomes necessary to display the complete path in the tree from the selected item to the root. The path can be displayed as a string comprising of the labels of the tree items and starting from the root node to the selected item or from the selected item to the root item. The following function traverses the tree and retrieves the path from the selected item to the root.


//  GetTreeHeirarchy	 -	Retrieves the tree heirarchy as a string comprising of item 
				labels from root node to selected node
//  hTItem		 -	The HTREEITEM of selected item
//  cstrTreeHierarchy  -	String to store the Tree heirarchy
//  bTopToBottom	 -	TRUE  if the path should be from root to selected item 
				FALSE if the path should be from the selected item to the root

void CMyTreeCtrl::GetTreeHierarchy(HTREEITEM hTItem, CString &cstrTreeHierarchy, const BOOL bTopToBottom)
{
	HTREEITEM hTRootItem = GetParentItem(hTItem);
	if ( hTRootItem == NULL ){
		cstrTreeHierarchy += (GetItemText(hTItem)+"\\");
		return;
	}
	if (!bTopToBottom)
		cstrTreeHierarchy += (GetItemText(hTItem)+"\\");
	GetTreeHierarchy(hTRootItem, cstrTreeHierarchy);
	if (bTopToBottom)
		cstrTreeHierarchy += (GetItemText(hTItem)+"\\");
}
To get the tree heirarchy, this function can be called as follows:

   CString csTreeHeirarchy;
   m_pcMyTreeCtrl->GetTreeHierarchy(m_pcMyTreeCtrl->GetSelectedItem(), csTreeHeirarchy, TRUE);
		



Comments

  • doesn't work, and never worked

    Posted by jms on 05/08/2015 11:35pm

    Doesn't compile, and doesn't work.. nowhere in the recursive algorithm is the HTREEITEM updated. also in the recursive call he uses only 2 params rather than the necessary 3.

    Reply
  • Non-recursive way to traverse a TreeView ...

    Posted by Legacy on 11/27/2001 12:00am

    Originally posted by: Marco F

    If you don't like the recursive way, here is an interative algorithm to traverse a tree.
    
    

    It is not non-MFC (plain SDK), but it should be easy to convert. m_hwnd is the handle of the tree control.

    [ccode]
    TVITEM item;
    item.mask = TVIF_STATE|TVIF_PARAM;
    item.hItem = TVI_ROOT;
    HTREEITEM lastItem;

    do {
    do {
    lastItem = item.hItem;
    if (lastItem != TVI_ROOT) {
    TreeView_GetItem( m_hwnd, &item );
    // DO SOMETHING WITH YOUR TREEVIEW-ITEM (item)
    }
    } while ( (item.hItem = TreeView_GetChild( m_hwnd, lastItem )) );
    while ( (! (item.hItem = TreeView_GetNextSibling( m_hwnd, lastItem ))) && (lastItem = item.hItem = TreeView_GetParent( m_hwnd, lastItem )) ) {}
    } while ( item.hItem );
    [/ccode]

    Reply
  • Very Nice.. It is recursive function.

    Posted by Legacy on 05/04/2000 12:00am

    Originally posted by: Kim mingu

    It is recursive function..

    Idea is good

    Reply
  • Good one

    Posted by Legacy on 03/04/2000 12:00am

    Originally posted by: Siva

    A very neat one.The only string operation that could be taken care of is the leading '\' symbol. Trivial.

    Reply
  • This is cool man, great job!!

    Posted by Legacy on 12/14/1999 12:00am

    Originally posted by: Jacob C Joseph

    Great

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • IT is in a continual battle to simplify and "do more with the same, or less," but the continued growth of data has drastically increased the complexity and cost of deploying, managing, and processing data using traditional IT infrastructure components. One key component — enterprise storage and the underlying software that controls the storage — is fortunately evolving nearly as fast as the data is growing. This ESG Lab Review documents the results of hands-on testing of the WekaIO Matrix …

  • The hunger for IIoT-enabled solutions is driving companies to seek out reliable, secure IIoT platforms that can handle industrial-grade IoT capabilities. What features and capabilities should companies expect in an IIoT platform? Until now, developing an IIoT solution has required the costly, time-intensive effort of platform building, as developers create technology stacks from scratch to handle the hardware, firmware, software, edge computing, analytics, business systems integration, and more. This …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date