获取CListCtrl选中行行号的多种方法

获取选中行的行号分为获取选中多行的行号和获取单行选中的行号。以下代码都经过测试没问题,涉及到一些函数请自行查询MSDN.

获取多行选中的行号:

方法一:

 

CString str;       
	for(int i=0; i<m_List.GetItemCount(); i++)       
	{            
		if( m_List.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )            
		{                 
			str.Format(_T("选中了第%d行"), i);                
			AfxMessageBox(str);           
		}      
	}


方法二:

 

 

CString str; 
	POSITION pos = m_List.GetFirstSelectedItemPosition();       
	if (pos == NULL)            
		TRACE0("No items were selected!/n");       
	else       
	{            
		while (pos)            
		{                 
			int nItem = m_List.GetNextSelectedItem(pos);                 
			TRACE1("Item %d was selected!/n", nItem);      
			str.Format(_T("选中了第%d行"), nItem);                
			AfxMessageBox(str);       
		}       
	}


获取单行选中行号的:

 

方法一:

 

CString str; 
	int nIdx=m_List.GetSelectionMark();
	if (nIdx<0)
	{
		AfxMessageBox(_T("没有选中任何行"));  
	} 
	else
	{
		str.Format(_T("选中了第%d行"), nIdx);                
		AfxMessageBox(str);
	}


获取选中的行号和列号:

 

方法一:需要添加NM_CLICK消息的响应函数,也就是单击消息响应:

 

DWORD dwPos = GetMessagePos();            
	CPoint point( LOWORD(dwPos), HIWORD(dwPos) );              
	m_List.ScreenToClient(&point);              
	LVHITTESTINFO lvinfo;            
	lvinfo.pt = point;           
	lvinfo.flags = LVHT_ABOVE;                 
	int nItem = m_List.SubItemHitTest(&lvinfo);            
	if(nItem != -1)            
	{                 
		CString strtemp;                 
		strtemp.Format(_T("单击的是第%d行第%d列"), lvinfo.iItem, lvinfo.iSubItem);                
		AfxMessageBox(strtemp);           
	} 


方法二:

 

需要添加NM_CLICK消息的响应函数,也就是单击消息响应:

 

void Ctest111Dlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码

	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;            
	if(pNMListView->iItem != -1)           
	{                 
		CString strtemp;                 
		strtemp.Format(_T("单击的是第%d行第%d列"),                                 
		pNMListView->iItem, pNMListView->iSubItem);                 
		AfxMessageBox(strtemp);           
	}   

	*pResult = 0;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值