在VB里TreeView控件中每个节点都有自己的"key",这个唯一的关键字实际上已经代表了该节点.知道了某个节点的"key",就可以通过关键字直接对该节点进行一些操作,例如通过Additem方法可以给"Key"对应节点添加子节点.我想问的是:在VC中是否也可以给节点设置关键字?是在lParam里设置吗(这好象是附加数据)?对于一个全部节点都已经添加完成了的TreeView控件,假设我已经知道类似于"key"的某项属性值,是否有函数可以直接提取出对应的节点,而不需要我自己再编写代码遍历查找?水平比较菜,大家不要见笑.

解决方案 »

  1.   

    用CMap类可以实现啊,添加的时候将HTREEITEM保存起来。
      

  2.   

    如果每个节点都有唯一的标示,并且节点的lParam没有被使用,那么就可以把lParam作为这个key,FindItem的时候可以根据这个lParam找到对应的HTREEITEM
      

  3.   

    CTreeCtrl::SetItemData
    This method sets the 32-bit application-specific value associated with the specified item.BOOL SetItemData( 
    HTREEITEM hItem, 
    DWORD dwData ); 
      

  4.   

    我认为Mackz(在相互)的方法比较好。最好自已派生一个类,在类中处理比较好。
      

  5.   

    应该用vcmute(横秋)的方法,就不需要CMap
      

  6.   

    CTreeCtrl::SetItemData()
    这本身就是此控件系统提供给你的保存与此树句柄项相关的用户上下文值,为何不用呢??!!!为何还要去用CMap建立关联
      

  7.   

    用Map在编程上简单些,通ItemData进行搜索当然行,只不过麻烦些;另外,一般这个东西都有自己的专门用途,比如我总是用来保存一些指针,很难直观的通过类似“key”字符串查找。
      

  8.   

    通过HTREEITEM变量不就可以直接对CTreectrl的进行操作了吗?当然,在你添加节点的时候,就需要保存该结点的hItem.