MFC 树控件含有checkbox的鼠标点击处理

首先要在树控件属性上加上checkbox;或者用代码;

MFC鼠标点击消息  

afx_msg void OnNMClickTreeUnitshow(NMHDR *pNMHDR, LRESULT *pResult);

ON_NOTIFY(NM_CLICK, IDC_TREE_UNITSHOW, OnNMClickTreeUnitshow) 

代码控制

void CSelectUnit::OnNMClickTreeUnitshow(NMHDR *pNMHDR, LRESULT *pResult)
{
//对点击显示进行处理
CPoint l_Point;
UINT l_iFlag;

        //鼠标点击,获取光标焦点,以防万一
GetCursorPos(&l_Point);

         //转为树坐标
m_TreeSelectUnit.ScreenToClient(&l_Point);

//获取鼠标点击的树节点
HTREEITEM l_SelectItem = m_TreeSelect.HitTest(l_Point, &l_iFlag);

//如果为空,直接返回,这里不能省;防止崩溃
if (l_SelectItem == NULL)
{
return;
}


//使光标处于该Item下
m_TreeSelectt.SelectItem(l_SelectItem);


if (l_iFlag & TVHT_ONITEMSTATEICON)
{

//得到当前节点的checkbox是否被选中

               //注意:这里的要用相反的去判断,因为chekcbox还没有进行改变;

BOOL l_bCheck = !m_TreeSelectUnit.GetCheck(l_SelectItem);

//至于后面的你是否要选中,如果选中的规则,就可以往后面写了

}

*pResult = 0;
}


我的规则是:  子节点选,父节点一定选; 父节点不选,子节点一定不选;

当然其实这个树控件是满足不了界面三态的显示的,所以一般我都用自绘;用三张图片代替checkbox;有打勾,不打勾,checkbox填满 这三种状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值