MFC List Control复选框的用法

参考博客原址:https://blog.csdn.net/xiaofen17458/article/details/106240230

MFC List Control复选框的用法

  1. 如何给list control的每一项都添加复选框

    OnInitDialog函数中添加以下代码,m_DataList是List control所绑定控件变量CListCtrl m_DataList;

	m_DataList.SetExtendedStyle(LVS_EX_CHECKBOXES);			//设置列表控件使用复选框

   2.设置复选框为选中状态

	m_DataList.SetCheck(nItemOrder,TRUE);			// nItemOrder为行号

3.设置复选框为未选中状态

	m_DataList.SetCheck(nItemOrder,FALSE);			// nItemOrder为行号

4.得到list某一行复选框的状态

	 BOOL bCheckStatus;
	 bCheckStatus = m_DataList.GetCheck(nItemOrder);

5.鼠标选中list某一行后复选框状态要发生改变

  • 给 list控件添加消息 在这里插入图片描述
  • 修改生成的函数
 void CDataManageDlg::OnNMClickListIpaddress(NMHDR *pNMHDR, LRESULT *pResult)
{
	// 鼠标点击某一项时改变checkbox状态
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

	BOOL bCheckStatus;
	bCheckStatus = m_IpList.GetCheck(pNMLV->iItem);
	m_IpList.SetCheck(pNMLV->iItem,!bCheckStatus);
	*pResult = 0;
}

6.鼠标选中list多行,被选中项的复选框发生改变

  • 改变list控件属性
    在这里插入图片描述
  • list控件添加消息
    在这里插入图片描述
  • 修改函数体
void CDataManageDlg::OnLvnItemchangedListData(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	
	//复选框状态发生变化,记录check状态的索引
	if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1))		/* old state : unchecked */ 
		&& (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2)))	/* new state : checked */   
	{
		//未勾选->勾选,存入vector ,m_vecCheckItem用来记录被选中项的序号
		m_vecCheckItem.push_back(pNMLV->iItem);
	}
	else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2))	/* old state : checked */   
		&& (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1)))	/* new state : unchecked */   
	{   
		//勾选->未勾选,从vector中将对应序号删掉
		vector<int>::iterator iter;
		for(iter=m_vecCheckItem.begin();iter!=m_vecCheckItem.end();iter++)
		{        
			//从vector中删除指定的某一个元素 
			if(*iter == pNMLV->iItem)
			{
				m_vecCheckItem.erase(iter);
				break;
			}
		}

	}

	// 选中项发生改变
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if(pNMListView->uChanged==LVIF_STATE)
	{
		if(pNMListView->uNewState & LVIS_SELECTED)
		{
			//处理内容
			BOOL bCheckStatus;
			bCheckStatus = m_DataList.GetCheck(pNMLV->iItem);
			m_DataList.SetCheck(pNMLV->iItem,!bCheckStatus);
		}
	}
	*pResult = 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值