CListCtrl控件实现点击单行选中当前CheckBox点击CheckBox实现多选功能

99 篇文章 0 订阅

首先创建CListCtr时设置风格

刚开始没看清楚把LVS_SHOWSELALWAYS设置到扩展风格了。导致鼠标移动到哪,选中项就跟到哪。

看清了时LVS   还是LVS_EX    

因为
#define LVS_SHOWSELALWAYS       0x0008
#define LVS_EX_TRACKSELECT      0x00000008
为同一个值


Report风格、失去焦点一直选中、只能单选、带Checkbox功能。不能用shift进行多选。选中时整行高亮。不显示网格线(因为我自绘了,你们根据自己情况设置)

	m_listCtrlStation.Create(WS_VISIBLE|WS_CHILD|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL,CRect(0,0,0,0),this, ID_WND_RTMDEV_LISTCTRL);

	DWORD   dwStyle =  m_listCtrlStation.GetExtendedStyle();
	//不要显示网格线
	dwStyle  |= LVS_REPORT & ~LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT| LVS_EX_HEADERDRAGDROP | LVS_EX_CHECKBOXES; 
	m_listCtrlStation.SetExtendedStyle(dwStyle); 


响应NM_CLICK消息

ON_NOTIFY( NM_CLICK, ID_WND_RTMDEV_LISTCTRL, OnLvnClickListItem )


响应函数如下

void CRtmDevMgrDlg::OnLvnClickListItem(NMHDR *pNMHDR, LRESULT *pResult)
{
	//获取单击所在的行号 (单选)  
	//找出鼠标位置   
	DWORD dwPos = GetMessagePos();  
	CPoint point( LOWORD(dwPos), HIWORD(dwPos) );  
	m_listCtrlStation.ScreenToClient(&point);  

	//定义结构体   
	LVHITTESTINFO lvinfo;  
	lvinfo.pt = point;  

	//获取行号信息   
	int itemSel = m_listCtrlStation.HitTest(&lvinfo);

	//如何点击到Checkbox上则不处理
	if(lvinfo.flags == LVHT_ONITEMSTATEICON)
	{
		int a = 0;
	}
	else
	{
		//单击时先设置所有checkbox为不选
		for(int i=0; i<m_listCtrlStation.GetItemCount(); i++)
		{
			m_listCtrlStation.SetCheck(i,FALSE);
		}

		m_listCtrlStation.SetCheck(itemSel,TRUE);
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值