点item前面的+ -
和双击item
都会打开和关闭节点那代码应该加在那个事件中呢?另外,如何得到这个节点的HTREEITEM?(它有可能不是选中的节点阿)谢谢!

解决方案 »

  1.   

    不用自己写代码,系统会自动为你做,如下:
    CImageList m_lstImage;
    CTreeCtrl *m_pTreeCtrl;//记得初始化;m_lstImage.Create(IDB_YOURIMAGE, 16, 1, RGB(0,255,0));//IDB_YOURIMAGE是一系列大小为16的
                                                          //位图,和工具条一样;
    m_pTreeCtrl->SetImageList(&m_lstImage, TVSIL_NORMAL);//将位图系列赋值给树控件;
    m_pTreeCtrl->InsertItem("节点名称", 3, 4, htiParent, TVI_LAST);//插入节点;
    //其中3、4代表:当节点收起时显示图片系列中的第3张图片,当节点展开时,显示第4张图片,这样就达到你的目标了
      

  2.   

    fengqinggao(风清高) :        谢谢!
    你的方法设定的是选中和未选中的图标。但是问题在于:   展开的节点未必是选中的那个阿。
    比如A节点展开了,但是你选中的却是B.我需要设置展开节点的图标。
      

  3.   

    呵呵,不好意思,看错了,这个消息响应中应该可以处理:
    TVN_ITEMEXPANDEDNotifies a tree view control's parent window that a parent item's list of child items has expanded or collapsed
      

  4.   

    看这里的效果
    http://www.vckbase.com/document/viewdoc/?id=466
      

  5.   

    fengqinggao(风清高) :
    msdn里面没有例子阿
    看完还是不知道怎么加进去说详细点怎么用吗? laiyiling(陌生人·钻研MS技术) :
    这个例子好像不是展开节点的
      

  6.   

    在你的TreeCtrl上,单击右键,选择“事件(Events)”(或者按Ctrl+W打开,在左边选中你的TreeCtrl的ID,右边就会有其相应的事件),里面就有一个TVN_ITEMEXPANDED的消息。添加后的函数中系统自动添加这样一个语句:
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;就从这里下手,当你展开或者收起时会激发这个函数,其中结构指针pNMTreeView的action参数,就记录了是打开还是关闭,即
    if(pNMTreeView->action == 1)
        //收起;
    else if(pNMTreeView->action == 2)
        //展开;至于具体怎么添加图片,我就不帮你研究了,呵呵
      

  7.   

    上面的语句这么写可能更容易看清楚写:
    if(pNMTreeView->action == 1)//收起;
    {
        //设置收起后的图片;
    }
    else if(pNMTreeView->action == 2)//展开;
    {
        //设置展宽后的图片;
    }