请教:tree control如何设置具有子节点的节点在初始状态就打开
请问:tree control怎么设置具有子节点的节点在初始状态就打开?
我的tree control代码如下
TVINSERTSTRUCT tvn;
HTREEITEM titem[5];
tvn.hInsertAfter=NULL;
tvn.hParent=NULL;
tvn.item.mask=TVIF_TEXT/*|TVIF_IMAGE|TVIF_SELECTEDIMAGE*/;
tvn.item.state=TVIS_EXPANDED;
tvn.item.pszText=L "Folder1 ";
titem[0]=TreeView_InsertItem(hwndtree,&tvn);
tvn.item.pszText=L "Folder2 ";
titem[1]=TreeView_InsertItem(hwndtree,&tvn);
tvn.item.pszText=L "Folder3 ";
titem[2]=TreeView_InsertItem(hwndtree,&tvn);
tvn.item.pszText=L "Folder4 ";
tvn.item.state = TVIS_EXPANDED;
titem[3]=TreeView_InsertItem(hwndtree,&tvn);
tvn.hInsertAfter = NULL;
tvn.hParent = titem[3];
tvn.item.mask = TVIF_TEXT;
tvn.item.pszText = L "subfolder ";
titem[4] = TreeView_InsertItem(hwndtree,&tvn);
tvn.item.state = TVIS_EXPANDED;
refresh2(hWnd);
TreeView_Expand(hWnd,titem[3],TVE_EXPAND|TVE_EXPANDPARTIAL);
if(TreeView_EnsureVisible(hWnd,titem[4]))
{
output(L "OK ");
}
else
{
output(L "FAIL ");
}
但是效果是需要鼠标点击节点才会打开,请问该怎么改才能是界面一出来节点就是打开状态?谢谢:)
------解决方案--------------------
CTreeCtrl::Expand
------解决方案--------------------
用递归
void CXXXXr::ExpandTree(HTREEITEM hItem)
{
m_TreeProject.Expand(hItem,TVE_EXPAND);
if(hItem = m_TreeProject.GetNextItem(hItem,TVGN_CHILD))//如果有子节点
{
m_TreeProject.Expand(hItem,TVE_EXPAND);
ExpandTree(hItem);
}
while( hItem = m_TreeProject.GetNextItem(hItem,TVGN_NEXT) )
{//遍历兄弟节点
ExpandTree(hItem);
}
}
使用方法 :ExpandTree(m_Tree.GetRootItem)
我的tree control代码如下
TVINSERTSTRUCT tvn;
HTREEITEM titem[5];
tvn.hInsertAfter=NULL;
tvn.hParent=NULL;
tvn.item.mask=TVIF_TEXT/*|TVIF_IMAGE|TVIF_SELECTEDIMAGE*/;
tvn.item.state=TVIS_EXPANDED;
tvn.item.pszText=L "Folder1 ";
titem[0]=TreeView_InsertItem(hwndtree,&tvn);
tvn.item.pszText=L "Folder2 ";
titem[1]=TreeView_InsertItem(hwndtree,&tvn);
tvn.item.pszText=L "Folder3 ";
titem[2]=TreeView_InsertItem(hwndtree,&tvn);
tvn.item.pszText=L "Folder4 ";
tvn.item.state = TVIS_EXPANDED;
titem[3]=TreeView_InsertItem(hwndtree,&tvn);
tvn.hInsertAfter = NULL;
tvn.hParent = titem[3];
tvn.item.mask = TVIF_TEXT;
tvn.item.pszText = L "subfolder ";
titem[4] = TreeView_InsertItem(hwndtree,&tvn);
tvn.item.state = TVIS_EXPANDED;
refresh2(hWnd);
TreeView_Expand(hWnd,titem[3],TVE_EXPAND|TVE_EXPANDPARTIAL);
if(TreeView_EnsureVisible(hWnd,titem[4]))
{
output(L "OK ");
}
else
{
output(L "FAIL ");
}
但是效果是需要鼠标点击节点才会打开,请问该怎么改才能是界面一出来节点就是打开状态?谢谢:)
------解决方案--------------------
CTreeCtrl::Expand
------解决方案--------------------
用递归
void CXXXXr::ExpandTree(HTREEITEM hItem)
{
m_TreeProject.Expand(hItem,TVE_EXPAND);
if(hItem = m_TreeProject.GetNextItem(hItem,TVGN_CHILD))//如果有子节点
{
m_TreeProject.Expand(hItem,TVE_EXPAND);
ExpandTree(hItem);
}
while( hItem = m_TreeProject.GetNextItem(hItem,TVGN_NEXT) )
{//遍历兄弟节点
ExpandTree(hItem);
}
}
使用方法 :ExpandTree(m_Tree.GetRootItem)