代码 片段
OnInitDialog() {
HTREEITEM ht = m_tree.InsertItem("啊啊");
BOOL a = m_tree.SetCheck(ht, TRUE);
BOOL b = m_tree.GetCheck(ht);//这时B返回T
HTREEITEM ht2 = m_tree.InsertItem("啊啊2");
BOOL a2 = m_tree.SetCheck(ht2, TRUE);
BOOL b2 = m_tree.GetCheck(ht2);//这时B2返回T
 
}//显示出来的TREE的CHECK没有对勾:(
ONBUTTON1
{
    BOOL b2 = m_tree.GetCheck(ht2);//这时B2返回F
}

解决方案 »

  1.   

    你的CTreeCtrl要关联一个CImageList,里面放有两个Image, 一个有勾(1)一个没勾(0)的检查框
    类似以下代码:mytreectrl.SetImageList(mystateimagelist,TVSIL_STATE);
    ASSERT(mystateimagelist.GetImageCount()==0)
    mystateimagelist.Add(&hicon_check);
    mystateimagelist.Add(&hicon_uncheck);
    mytreectrl.SetCheck(TRUE);//有勾
    mytreectrl.SetCheck(FALSE);//没勾//msdn并没有说清check,但从其源码的实现上可以看出是用StateImage来实现的.
    源码如下:BOOL CTreeCtrl::SetCheck(HTREEITEM hItem, BOOL fCheck)
    {
    ASSERT(::IsWindow(m_hWnd));
    TVITEM item;
    item.mask = TVIF_HANDLE | TVIF_STATE;
    item.hItem = hItem;
    item.stateMask = TVIS_STATEIMAGEMASK; /*
    Since state images are one-based, 1 in this macro turns the check off, and
    2 turns it on.
    */
    item.state = INDEXTOSTATEIMAGEMASK((fCheck ? 2 : 1)); return (BOOL)::SendMessage(m_hWnd, TVM_SETITEM, 0, (LPARAM)&item);
    }
      

  2.   

    顶!
    利用IMGLIST确实可以作到CHECK的效果,不过VC6中的TREECTRL新加了加了CHECK BOXES属性,已经可以简化工作了,你可以在资源看到,它和节点的IMG不是一回事的。
      

  3.   

    我已经试过用按钮来执行
    HTREEITEM ht2 = m_tree.getfirstvasibleintem();
    BOOL a2 = m_tree.SetCheck(ht2, TRUE);
    可以正常的改变状态,就是紧跟着在InsertItem后面不行:(