How To Find an Item in a Tree Control Via its LabelLast reviewed: July 10, 1997Article ID: Q155895 |
2.20 4.00 4.10 4.20
WINDOWS NT
kbusage kbprg kbcode kbhowto
The information in this article applies to:
SUMMARYThe "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.
MORE INFORMATION
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 50HTREEITEM 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); |
KBCategory: kbusage kbprg kbcode kbhowto
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |