关于带checkedbox的CTreeCtrl的问题。

TaShin 2002-01-14 03:34:11
金山毒霸的界面很爽是吧?:)
只要父checkedbox被选中,则所有子checkedbox也被选中,如果父checkedbox被取消,则
所有子checkedbox都被取消,如果父checkedbox没被选中,但是有一个子checkedbox被选中了
,则父checkedbox也被选中了,为了实现这样的功能,我程序如下,但是编译通过,运行则非
法操作,我不解,我的OnLButtonDown事件如下,请指教:
void CLeftView::OnLButtonDown(UINT nFlags, CPoint point)
{
UINT pFlags=0;
UINT OldState,ParentState; //原来状态,父节点状态
CTreeCtrl& Tree=GetTreeCtrl();

HTREEITEM Parent; //父节点
HTREEITEM State = Tree.HitTest(point,&pFlags);

if(pFlags&TVHT_ONITEMSTATEICON|TVHT_ONITEMLABEL) //鼠标在自定义的图表上或者在l
abel上时

{

Parent=Tree.GetParentItem(State);
OldState=Tree.GetItemState(State, TVIS_STATEIMAGEMASK);

ParentState=Tree.GetItemState(Parent, TVIS_STATEIMAGEMASK);

if(OldState>>12&1) //如果某个节点被原来是被选中的,则它的所有子节点都被
选中
{

for(HTREEITEM item=Tree.GetNextItem(State,TVGN_CHILD);item!=NULL;item=Tree.G
etNextSiblingItem(item))
{
Tree.SetItemState(item,INDEXTOSTATEIMAGEMASK(2),TVIS_STATEIMAGEMASK); //所有
子节点点击后改为取消状态
}
}
else //如果根没有被选中,则先看它的父节点十分被选中
{
if((Tree.GetParentItem(State)>>12&1) //父节点是选中的
{
for(HTREEITEM item=Tree.GetNextItem(State,TVGN_CHILD);item!=NULL;item=Tree
.GetNextSiblingItem(item))
Tree.SetItemState(item,INDEXTOSTATEIMAGEMASK(1),TVIS_STATEIMAGEMA
SK); //所有子节点点击后改为选中状态
}
else //父节点是取消状态的
Tree.SetItemState(Parent,INDEXTOSTATEIMAGEMASK(1),TVIS_STATEIMAGE
MASK); //父节点设置为选中的
for(HTREEITEM item=Tree.GetNextItem(State,TVGN_CHILD);item!=NULL;item=
Tree.GetNextSiblingItem(item))
Tree.SetItemState(item,INDEXTOSTATEIMAGEMASK(1),TVIS_STATEIMAGEMA
SK); //所有子节点点击后改为选中状态
}

}
CTreeView::OnLButtonDown(nFlags, point);
}

...全文
102 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧