MFC CListCtrl相应checkbox消息

最近MFC项目使用CListCtrl控件时,遇到一些问题,记录下。

当CListCtrl::SetExtendedStyle包含了LVS_EX_CHECKBOXES项时,控件的每一行最前面都会显示一个checkbox。但实际上,并不是真正的checkbox控件,而是一张勾选状态的image和未勾选状态的image,点击时勾选状态和未勾选状态的切换就是在两张image间切换。

有时候,我们点击checkbox时,需要响应状态改变消息。前面说的,它不是checkbox控件,因此没办法用checkbox控件的方式响应消息。

可以添加CListCtrl控件的NM_CLICK消息处理程序。代码如下:

void CMFCApplication2Dlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: Add your control notification handler code here
	DWORD dwPos = GetMessagePos();
	CPoint pt(dwPos);
	m_ctlList1.ScreenToClient(&pt);

	UINT nFlag;
	int nItem = m_ctlList1.HitTest(pt, &nFlag);
	if (nFlag == LVHT_ONITEMSTATEICON)
	{
		BOOL bCheckState = m_ctlList1.GetCheck(nItem);

		//注意,bCheckState为TRUE,checkbox从勾选状态变为未勾选状态
		if (bCheckState)
		{
			//...............
		}
		else
		{
			//...............
		}
	}

	*pResult = 0;
}


 如有不对的地方欢迎大家指正,或者大家有更好的方法请分享一下。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值