本文收集关于TreeView的操作集合。
一、Expand/Collapse所有子节点
提供两个版本,一为WTL,二为SDK。
void ExpandAllChild(HWND hTreeView, HTREEITEM hRoot, int nCode)
{
HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hRoot);
while (hTreeItem)
{
ExpandAllChild(hTreeView, hTreeItem, nCode);
::SendMessage(hTreeView, TVM_EXPAND, nCode, (LPARAM)hTreeItem);
hTreeItem = (HTREEITEM)::SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hTreeItem);
}
}
void ExpandAllChild1(WTL::CTreeViewCtrlEx *pTreeView, HTREEITEM hRoot, int nCode)
{
WTL::CTreeItem root(hRoot, pTreeView);
WTL::CTreeItem item = root.GetChild();
while (!item.IsNull())
{
if (item.HasChildren())
ExpandAllChild1(pTreeView, item, nCode);
item.Expand(nCode);
item = item.GetNextSibling();
}
}
二、Other
....
一、Expand/Collapse所有子节点
提供两个版本,一为WTL,二为SDK。
void ExpandAllChild(HWND hTreeView, HTREEITEM hRoot, int nCode)
{
HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hRoot);
while (hTreeItem)
{
ExpandAllChild(hTreeView, hTreeItem, nCode);
::SendMessage(hTreeView, TVM_EXPAND, nCode, (LPARAM)hTreeItem);
hTreeItem = (HTREEITEM)::SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hTreeItem);
}
}
void ExpandAllChild1(WTL::CTreeViewCtrlEx *pTreeView, HTREEITEM hRoot, int nCode)
{
WTL::CTreeItem root(hRoot, pTreeView);
WTL::CTreeItem item = root.GetChild();
while (!item.IsNull())
{
if (item.HasChildren())
ExpandAllChild1(pTreeView, item, nCode);
item.Expand(nCode);
item = item.GetNextSibling();
}
}
二、Other
....
本文提供了TreeView控件中展开和折叠所有子节点的方法,并给出了两种不同版本的实现:一种使用Windows API (SDK),另一种使用WTL(Windows Template Library)。这些方法可以帮助开发者更方便地控制TreeView中的节点显示。
1601

被折叠的 条评论
为什么被折叠?



