读书人

CTreeView控件CheckBox的显示有关问题

发布时间: 2012-01-18 00:23:26 作者: rapoo

CTreeView控件CheckBox的显示问题
我用CTreeView显示一个文件夹的结构。并在每个结点前面加了CheckBox框。

我自己写了一个算法。如果给一个文件夹结点的CheckBox框里打上勾。这个文件夹结点下的所有文件和文件夹都会被打上勾。

现在的问题是如果这先点了这个文件夹结点前面的+号,也就是这个文件夹结点已经被展开,再点这个文件夹结点的CheckBox框打上勾。这个文件夹结点下的结点都不会立刻被打上勾,非要再点一下-号关闭这个文件夹结点再点+号才看到里面的文件和文件夹都打上了勾。

同理想把所有勾去掉也是这个问题。。请问有什么解决办法

[解决办法]
改成这样!

void CTestTreeDlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW *pNMTREEVIEW=(NM_TREEVIEW *)pNMHDR;
UINT uFlags=0;
CPoint point,p;
TVHITTESTINFO HitTestInfo;
GetCursorPos(&point);
m_tree.ScreenToClient(&point);
HitTestInfo.pt=point;
HTREEITEM hti=m_tree.HitTest(point, &uFlags);
//HTREEITEM hti=m_tree.GetSelectedItem();
if(hti!=NULL)
{
CString str = GetFullPath(hti);
str = m_strFileBasePath + "\\ " + str;
//MessageBox(str);
if(uFlags & TVHT_ONITEMSTATEICON )
{
if(m_tree.GetChildItem(hti) != NULL)
{
if(0 == m_tree.GetCheck(hti))
{
//MessageBox( "是文件夹,已经被选中 ");
TreeFun(hti, true);
}
else
{
//MessageBox( "是文件夹,没被选中 ");
TreeFun(hti, false);
TreeFunParent(hti, false);
}
}
else
{
if(0 == m_tree.GetCheck(hti))
{
//MessageBox( "不是文件夹,已经被选中 ");

}
else
{
//MessageBox( "不是文件夹,没被选中 ");
TreeFunParent(hti, false);
}
}
}
}
}

读书人网 >VC/MFC

热点推荐