代码 片段
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
}
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
}
类似以下代码: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);
}
利用IMGLIST确实可以作到CHECK的效果,不过VC6中的TREECTRL新加了加了CHECK BOXES属性,已经可以简化工作了,你可以在资源看到,它和节点的IMG不是一回事的。
HTREEITEM ht2 = m_tree.getfirstvasibleintem();
BOOL a2 = m_tree.SetCheck(ht2, TRUE);
可以正常的改变状态,就是紧跟着在InsertItem后面不行:(