获取选中行的行号分为获取选中多行的行号和获取单行选中的行号。以下代码都经过测试没问题,涉及到一些函数请自行查询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;
}