循环取得所有可见的节点,判断每个节点的状态值:for(HTREEITEM hItem=m_TestTree.GetRootItem();hItem!=NULL;hItem=m_TestTree.GetNextVisibleItem(hItem))
    if(m_TestTree.GetItemState(hItem,0x2000) & 0x2000)
        AfxMessageBox(m_TestTree.GetItemText(hItem));
有个缺点,就是如果你选择的项没有展开的话,是找不出来的,所以你必须把所有节点都展开再来调用上述代码..

解决方案 »

  1.   

    好的,谢谢啦,我试试。还有一个问题,就是用TreeView控件如何加载大量的数据?谢谢!
      

  2.   

    大概几百行吧比如  -AAA
           -BBB
           -CCC
           -DDD
          -EEE
           ....
           ....这样类型的数据,我通过什么样的方法可以读入TreeView控件,使BBB,CCC,DDD成为AAA子结点。请GG赐教
      

  3.   

    几百万行? 我劝你别这么做了..程序会死的.. -_-b另外,增加子结点的方法:CTreeCtrl m_TestTree;//添加一级结点
    HTREEITEM hEdit = m_TestTree.InsertItem("亚洲",2,2);
    HTREEITEM hRead = m_TestTree.InsertItem("欧洲",2,2);
    //添加二级结点
    m_TestTree.InsertItem("中国",0,0,hEdit);
    m_TestTree.InsertItem("韩国",0,0,hEdit);
    m_TestTree.InsertItem("意大利",0,0,hRead);//设置控件属性
    m_TestTree.ModifyStyle(TVS_HASBUTTONS,TVS_HASBUTTONS);
    m_TestTree.ModifyStyle(TVS_HASLINES,TVS_HASLINES);
    m_TestTree.ModifyStyle(TVS_LINESATROOT,TVS_LINESATROOT);
    m_TestTree.ModifyStyle(TVS_SHOWSELALWAYS,TVS_SHOWSELALWAYS);
    //展开一级结点
    m_TestTree.Expand(hEdit,TVE_EXPAND);//TVE_COLLAPSE
    m_TestTree.Expand(hRead,TVE_EXPAND);
      

  4.   

    对了,GG,以上的程序是MFC,如果用WIN32来写,应该怎么写?
      

  5.   

    WIN32跟MFC差不多的。你上MSDN上查下。数据量太大的话你可以只加载要看到的那部分。
      

  6.   

    To jinghao66666
    如果按照你的要求做,代码应该怎么写?
      

  7.   

    How To Use cChildren of TV_ITEM to Add Speed & Use Less RAM