背景:用CTreeCtrl实现2级的数据选择/显示
第一级数据称为根节点数据(根条目), 每个根条目可以拥有若干个子节点数据(子条目), 共2级
CTreeCtrl构造时,使用TVS_HASBUTTONS属性, 使CTreeCtrl在每个条目右边显示一个复选框(checkbox)要求:1)当一个根条目下所有的子条目都被选中时, 则相应根条目的复选框自动显示成 选中状态.(checked)
2)当一个根条目下所有的子条目都没有选中时,则相应根条目的复选框自动显示成 未选中状态(unchecked).
3)当一个根条目下部分子条目被选中时, 则相应根条目的复选框自动显示成 部分选中状态(part checked).以上功能1)2)可以通过调用成员函数 SetCheck()/GetCheck()设置CTreeCtrl条目的checked/unchecked状态来实现, 但功能 3)part checked状态必须通过扩展CTreeCtrl来实现, 例如复选框显示为选中状态(checked),但颜色显示成深灰色,以和选中状态(checked)相区别.请问, 如何扩展CTreeCtrl,可以实现以上3态checkbox效果?
谢谢!

解决方案 »

  1.   

    SetItemStateTo set the state image index, use INDEXTOSTATEIMAGEMASK. This macro takes an index and sets bits 12 through 15 appropriately. To indicate that the item has no state image, set the index to zero. This convention means that image zero in the state image list cannot be used as a state image. To isolate bits 12 through 15 of the state member, use the TVIS_STATEIMAGEMASK mask
      

  2.   

    就是用state image啊,自己设置一个图像列表,然后相应键盘和鼠标操作设置item的state image index就可以了
      

  3.   

    给你一个例子:
    http://www.codeguru.com/Cpp/controls/treeview/misc-advanced/article.php/c3983/
      

  4.   

    还有:
    http://www.codeguru.com/Cpp/controls/treeview/misc-advanced/article.php/c701/http://www.codeguru.com/Cpp/controls/treeview/misc-advanced/article.php/c735/
      

  5.   

    楼主留个EMAIL,偶给你发一份过去~~
      

  6.   

    HOHO,搜到了一个
    http://www.vckbase.com/document/viewdoc/?id=665
      

  7.   

    早晨来上班, 看到有这么多网友回复了帖子
    真的没想到, 谢谢以上各位的回答我先研究一下各位的方法是否可以实现我的需求.nineclock(我又饿了):
    我的mail地址 [email protected]
      

  8.   

    nineclock(我又饿了):邮件收到, 正在学习...
    先谢了.
      

  9.   

    谢谢以上各位, 3态checkbox终于搞定了!