现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

CTreeCtl类的使用心得

2012-07-31 06:45 工业·编程 ⁄ 共 871字 ⁄ 字号 暂无评论

一、从指定节点开始查找LPARAM等于指定值的树节点

思路:

首先,检查当前节点是否符合要求,是则返回当前节点。

其次,若当前节点有子节点,则遍历子节点。

最后,若当前节点有兄弟节点,则遍历兄弟节点。

返回值:若找到符合条件的节点,则返回该节点,否则,返回NULL。

二、案例

HTREEITEM CDepartmentManageDlg::FindTreeItem(HTREEITEM hItem,LPARAM lParentId)
{
HTREEITEM hTreeItem;
HTREEITEM hChildItem;
HTREEITEM hSiblingItem;

// 检查当前节点是否符合要求
DWORD dwId = dptTree.GetItemData(hItem);
if (dwId == lParentId)
{
return hItem;
}

// 搜索当前节点的子节点
TVITEM item;
item.mask = TVIF_CHILDREN | TVIF_HANDLE;
item.hItem = hItem;
dptTree.GetItem(&item);
if (item.cChildren == 1) // 等于1说明有子节点
{
hChildItem = dptTree.GetNextItem(hItem,TVGN_CHILD);
if (hChildItem != NULL)
{
hTreeItem = FindTreeItem(hChildItem,lParentId);
if (hTreeItem != NULL)
{
return hTreeItem;
}
}
}

// 搜索兄弟结点
hSiblingItem = dptTree.GetNextSiblingItem(hItem);
while(hSiblingItem != NULL)
{
hTreeItem = FindTreeItem(hSiblingItem,lParentId);
if (hTreeItem != NULL)
{
return hTreeItem;
}

hSiblingItem = dptTree.GetNextSiblingItem(hSiblingItem);
}

return NULL;
}

给我留言

留言无头像?