void CMyTreeCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
UINT l_uFlags;
HTREEITEM hItem =this->HitTest(point, &l_uFlags);
HTREEITEM hOldItem=this->GetSelectedItem();
if(hItem)
{//090917zjj,如果当前点中某个节点,那么需要经过判断选择操作,1.点击了当前选中节点,执行打开/收缩操作;2.点击了当前未选中节点,执行选中、打开操作。
//SelectItem(hItem);
if (hItem==hOldItem)
{//090917zjj,点击了当前选中的节点,执行操作1
this->Expand(hItem,TVE_TOGGLE);
}
else
{//090917zjj,点击了当前未选中的节点,执行操作2
UINT uState=this->GetItemState(hOldItem,TVIS_EXPANDED );
this->SelectItem(hItem);
this->SetItemState(hOldItem,uState ,TVIS_EXPANDED );
}
}
}
5 个解决方案
#1
具有 TVS_SINGLEEXPAND 样式的树控件 (Tree Control) 展开选定的项,而折叠未选定的项。
#2
你是想选中一个结点时展开或合住它,是吧?
HTREEITEM hItem=this->GetSelectedItem();
this->Expand(hItem,TVE_TOGGLE);
就可以了啊.
HTREEITEM hItem=this->GetSelectedItem();
this->Expand(hItem,TVE_TOGGLE);
就可以了啊.
#3
http://www.vckbase.com/document/viewdoc/?id=466
这个不会自动收缩,下载看看吧
这个不会自动收缩,下载看看吧
#4
一针见血。修改了控件的TVS_SINGLEEXPAND属性之后,在鼠标事件里面只需使用SelectItem就行了,根本不用我想的那样再记录状态什么的。太感谢了。
#5
有多个节点,我选中某个节点(假设是A),那么A就展开了,在A展开的情况下,我再选中B,B会展开,但是同时A又收起来了。这里B展开的前提是B要被选中,所以单纯的使用Expand不行。我这里树形控件的TVS_SINGLEEXPAND 属性设置成true了,按照skywoodsky的方法可行。不过还是谢谢你
#1
具有 TVS_SINGLEEXPAND 样式的树控件 (Tree Control) 展开选定的项,而折叠未选定的项。
#2
你是想选中一个结点时展开或合住它,是吧?
HTREEITEM hItem=this->GetSelectedItem();
this->Expand(hItem,TVE_TOGGLE);
就可以了啊.
HTREEITEM hItem=this->GetSelectedItem();
this->Expand(hItem,TVE_TOGGLE);
就可以了啊.
#3
http://www.vckbase.com/document/viewdoc/?id=466
这个不会自动收缩,下载看看吧
这个不会自动收缩,下载看看吧
#4
一针见血。修改了控件的TVS_SINGLEEXPAND属性之后,在鼠标事件里面只需使用SelectItem就行了,根本不用我想的那样再记录状态什么的。太感谢了。
#5
有多个节点,我选中某个节点(假设是A),那么A就展开了,在A展开的情况下,我再选中B,B会展开,但是同时A又收起来了。这里B展开的前提是B要被选中,所以单纯的使用Expand不行。我这里树形控件的TVS_SINGLEEXPAND 属性设置成true了,按照skywoodsky的方法可行。不过还是谢谢你