CTreeCtrl获取每个根节点文本

zouhj2009 2009-06-19 04:54:11
11--------------》根节点
11-1--》子节点
11-2
22--------------》根节点
22-1
33--------------》根节点
33-1

获取每个根节点文本保存到CString Name[20];

HTREEITEM hItem=m_ctrlTree.GetRootItem();
HTREEITEM r=NULL;
int i=0;
while(r==m_ctrlTree.GetParentItem(hItem))
{
Name[i++]=m_ctrlTree.GetItemText(r);

}
这样怎么不行啊
...全文
990 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
麻浦区保安 2012-07-27
  • 打赏
  • 举报
回复
我也正在搞这个多个根节点的处理啊!学习了!呵呵
joachern 2010-03-31
  • 打赏
  • 举报
回复
好好看看
zouhj2009 2009-06-19
  • 打赏
  • 举报
回复
不好意思 分只给答应完成正确的
下次更改模式 回答问题有帮助都给分
NTooL 2009-06-19
  • 打赏
  • 举报
回复
参数不明白的试试就知道了
NTooL 2009-06-19
  • 打赏
  • 举报
回复
这是遍历树的一个函数

//hitem:待遍历树的根节点
void TreeVisit(HTREEITEM hItem)
{
AfxMessageBox(m_treectrl.GetItemText(hItem));

if( m_treectrl.ItemHasChildren(hItem) )
{
HTREEITEM hChildItem = m_treectrl.GetChildItem(hItem);

while(hChildItem!=NULL)
{
TreeVisit(hChildItem); //递归遍历孩子节点

hChildItem = m_treectrl.GetNextItem(hChildItem, TVGN_NEXT);
}
}

}
NTooL 2009-06-19
  • 打赏
  • 举报
回复
CString Name[20];
int i = 0;
HTREEITEM hItem = m_treectrl.GetRootItem();

Name[i] = m_treectrl.GetItemText(hItem);

while(hItem = m_treectrl.GetNextItem(hItem , TVGN_NEXT), ++i, hItem)
{
Name[i] = m_treectrl.GetItemText(hItem);
}

for (int j = 0; j < 20; j++)
{
TRACE(Name[j] + "\n");
}
搞定
zouhj2009 2009-06-19
  • 打赏
  • 举报
回复
CTreeCtrl::GetNextItem

HTREEITEM GetNextItem( HTREEITEM hItem, UINT nCode );

返回值:如果成功则返回下一个项的句柄;否则返回NULL。

参数: hItem 一个tree项的句柄。
nCode 一个用来指示与hItem的关系的类型的标志。这个标志可以是下列值之一: · TVGN_CARET 获取当前被选择的项。
· TVGN_CHILD 获取第一个子项。hItem参数必须是NULL。
· TVGN_DROPHILITE 获取是一次拖放操作的目标的项。
· TVGN_FIRSTVISIBLE 获取第一个可见的项。
· TVGN_TEXT 获取下一个兄弟项。
· TVGN_NEXTVISIBLE 获取跟随在指定项之后的下一个可视项。
· TVGN_PARENT 获取指定项的父项。
· TVGN_PREVIOUS 获取前一个兄弟项。
· TVGN_PREVIOUSVISIBLE 获取在指定项之前的第一个可视项。
· TVGN_ROOT 获取根项的第一个子项,指定项是该根项的一个部分。


说明:
此成员函数用来获取与nItem具有由nCode参数指定的关系的tree view项。

有些不太理解 那个参数啊
bulijun1987 2009-06-19
  • 打赏
  • 举报
回复
GetNextItem()
gadx86 2009-06-19
  • 打赏
  • 举报
回复
MSDN查下GetNextItem吧 我以前用过……
zouhj2009 2009-06-19
  • 打赏
  • 举报
回复
7楼只是输出2个根
zouhj2009 2009-06-19
  • 打赏
  • 举报
回复
5楼的 只是3个根吧 多个呢
6楼的试过了不行 句柄为空 不能进去啊
不动如岳 2009-06-19
  • 打赏
  • 举报
回复
HTREEITEM hItem=m_tree_test.GetNextItem(NULL,TVGN_CHILD);
TRACE(m_tree_test.GetItemText(hItem));

while(hItem= m_tree_test.GetNextItem(hItem ,TVGN_NEXT),hItem)
{
TRACE(m_tree_test.GetItemText(hItem));
}
马上下班!完成!
gadx86 2009-06-19
  • 打赏
  • 举报
回复
HTREEITEM hItem = m_ctrlTree.GetNextItem(NULL,TVGN_FIRSTVISIBLE);
这个试试 反正就是GetNextItem方法,肯定有个参数可以……
不动如岳 2009-06-19
  • 打赏
  • 举报
回复
获取第一个子项:
HTREEITEM hItem=m_tree_test.GetNextItem(NULL,TVGN_CHILD);
TRACE(m_tree_test.GetItemText(hItem));
获取下一个兄弟
hItem=m_tree_test.GetNextItem(hItem,TVGN_NEXT);
TRACE(m_tree_test.GetItemText(hItem));
获取下一个兄弟
hItem=m_tree_test.GetNextItem(hItem,TVGN_NEXT);
TRACE(m_tree_test.GetItemText(hItem));

做一个循环,应该就可以了!
zouhj2009 2009-06-19
  • 打赏
  • 举报
回复
HTREEITEM hItem = m_ctrlTree.GetNextItem(NULL,TVGN_NEXT); NULL 这里没有获得句柄吧
gadx86 2009-06-19
  • 打赏
  • 举报
回复
改成while(NULL != hItem )试试
zouhj2009 2009-06-19
  • 打赏
  • 举报
回复
while(NULL != GetNextItem(hItem ,TVGN_NEXT)) 条件不成立进不去
gadx86 2009-06-19
  • 打赏
  • 举报
回复
用GetNextItem()方法
HTREEITEM hItem = m_ctrlTree.GetNextItem(NULL,TVGN_NEXT);
int i = 0;
while(NULL != GetNextItem(hItem ,TVGN_NEXT)){
Name[i] = m_ctrlTree.GetItemText(hItem );
hItem = m_ctrlTree.GetNextItem(hItem,TVGN_NEXT);
i++;
}

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧