Microsoft KB Archive/155895

= How To Find an Item in a Tree Control Via its Label =

Article ID: 155895

Article Last Modified on 12/10/2003

-

APPLIES TO


 * Microsoft Visual C++ 2.2
 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 4.1 Subscription
 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 4.2 Professional Edition

-



This article was previously published under Q155895



SUMMARY
The "tree view" common control does not have any built-in method for searching the entire tree, or for selecting an item contained within the tree when given a specific item label. This article provides code that returns the location of any item in a tree when given a specific label to search for.

The GetItemByName function takes the window handle of the tree control, HTREEITEM, which points to the item in the tree to start searching and a string for which to search.



Sample Code

 * 1) include 
 * 2) include 

// Note: If you have items with more than 50 characters // of text, you'll need to increase this value.
 * 1) define MAXTEXTLEN 50

HTREEITEM GetItemByName(HWND hWnd, HTREEITEM hItem,                       LPCTSTR szItemName) {   // If hItem is NULL, start search from root item. if (hItem == NULL) hItem = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM,                                      TVGN_ROOT, 0); while (hItem != NULL) {       char szBuffer[MAXTEXTLEN+1]; TV_ITEM item;

item.hItem = hItem; item.mask = TVIF_TEXT | TVIF_CHILDREN; item.pszText = szBuffer; item.cchTextMax = MAXTEXTLEN; SendMessage(hWnd, TVM_GETITEM, 0, (LPARAM)&item);

// Did we find it? if (lstrcmp(szBuffer, szItemName) == 0) return hItem;

// Check whether we have child items. if (item.cChildren) {           // Recursively traverse child items. HTREEITEM hItemFound, hItemChild;

hItemChild = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM,                                               TVGN_CHILD, (LPARAM)hItem); hItemFound = GetItemByName(hWnd, hItemChild, szItemName);

// Did we find it? if (hItemFound != NULL) return hItemFound; }

// Go to next sibling item. hItem = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM,                                      TVGN_NEXT, (LPARAM)hItem); }

// Not found. return NULL; } For example, to search the entire tree for the word "Jeff" and then highlight that word, you can use the following code:

Using Windows SDK: HTREEITEM hItem; hItem = GetItemByName(hWndTreeCtrl, NULL, "Jeff"); if (hItem != NULL) SendMessage(hWndTreeCtrl, TVM_SELECTITEM, TVGN_CARET,                   (LPARAM)hItem); Using MFC: HTREEITEM hItem = GetItemByName(m_TreeCtrl.GetSafeHwnd,                                   NULL, "Jeff"); if (hItem != NULL) m_TreeCtrl.SelectItem(hItem);

Additional query words: 2.20 4.00 4.10 4.20 kbdsd CTreeCtrl

Keywords: kbcode KB155895

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.