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;
}

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

猜你喜欢

转载自blog.csdn.net/xuepiaofei1/article/details/81213614