Article ID: 155895 - Last Review: December 10, 2003 - Revision: 2.0
How To Find an Item in a Tree Control Via its Label
This article was previously published under Q155895
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
#include <windows.h>
#include <commctrl.h>
// Note: If you have items with more than 50 characters
// of text, you'll need to increase this value.
#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);
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 Retired KB Content Disclaimer This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
Provide feedback on this information
Did this information solve your problem?
Was this information relevant?
What can we do to improve this information?
To protect your privacy, do not include contact information in your feedback.
Thank you! Your feedback is used to help us improve our support content. For more assistance options, please visit the
Help and Support Home Page .