置顶] 获取CListCtrl选中行行号的多种方法"/>
[置顶] 获取CListCtrl选中行行号的多种方法
转自:
获取选中行的行号分为获取选中多行的行号和获取单行选中的行号。以下代码都经过测试没问题,涉及到一些函数请自行查询MSDN.
获取多行选中的行号:
方法一:
[cpp] view plain copy print ?
- 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);
- }
- }
方法二:
[cpp] view plain copy print ?
- 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);
- }
- }
获取单行选中行号的:
方法一:
[cpp] view plain copy print ?
- CString str;
- int nIdx=m_List.GetSelectionMark();
- if (nIdx<0)
- {
- AfxMessageBox(_T("没有选中任何行"));
- }
- else
- {
- str.Format(_T("选中了第%d行"), nIdx);
- AfxMessageBox(str);
- }
获取选中的行号和列号:
方法一:需要添加NM_CLICK消息的响应函数,也就是单击消息响应:
[cpp] view plain copy print ?
- 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消息的响应函数,也就是单击消息响应:
[cpp] view plain copy print ?
- 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;
- }
更多推荐
[置顶] 获取CListCtrl选中行行号的多种方法
发布评论