如何让ListCtrl的CheckBox只有一个处于选中状态

本文介绍了如何使用ListCtrl组件在Windows应用程序中实现单选CheckBox功能。通过设置ListCtrl的样式和响应LVN_ITEMCHANGED通知,可以确保同一时刻只有一个CheckBox被选中。此外,还提供了一个辅助函数用于取消勾选其他项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、要让ListCtrl的每一行的第一列为CheckBox,需要做如下设置:

listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_CHECKBOXES);


2、为了限制ListCtrl只能有一行的CheckBox处于选中状态,则需要响应ListCtrl的 LVN_ITEMCHANGED 消息:

ON_NOTIFY(LVN_ITEMCHANGED, IDC_LC_CONFIG, OnLvnItemchangedLcConfig)

void CRestorePage::OnLvnItemchangedLcConfig(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码  
	if (m_LcConfig.GetCheck(pNMLV->iItem))
		UnCheckOtherItem(m_LcConfig, pNMLV->iItem);
	*pResult = 0;
}


其中UnCheckOtherItem(...)的代码如下:

void CRestorePage::UnCheckOtherItem(CListCtrl& listCtrl, int index)
{
	for (int i = 0; i<listCtrl.GetItemCount(); ++i)
	{
		if (i == index)
			continue;
		listCtrl.SetCheck(i, FALSE);
	}
}

转自: http://www.cnblogs.com/strinkbug/archive/2008/01/05/1027332.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值