[置顶] 获取CListCtrl选中行行号的多种方法

编程入门 行业动态 更新时间:2024-10-07 08:23:05

[<a href=https://www.elefans.com/category/jswz/34/1764841.html style=置顶] 获取CListCtrl选中行行号的多种方法"/>

[置顶] 获取CListCtrl选中行行号的多种方法


转自:


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

获取多行选中的行号:

方法一:

[cpp]  view plain copy print ?
  1. CString str;         
  2.     for(int i=0; i<m_List.GetItemCount(); i++)         
  3.     {              
  4.         if( m_List.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )              
  5.         {                   
  6.             str.Format(_T("选中了第%d行"), i);                  
  7.             AfxMessageBox(str);             
  8.         }        
  9.     }  

方法二:

[cpp]  view plain copy print ?
  1. CString str;   
  2.     POSITION pos = m_List.GetFirstSelectedItemPosition();         
  3.     if (pos == NULL)              
  4.         TRACE0("No items were selected!/n");         
  5.     else         
  6.     {              
  7.         while (pos)              
  8.         {                   
  9.             int nItem = m_List.GetNextSelectedItem(pos);                   
  10.             TRACE1("Item %d was selected!/n", nItem);        
  11.             str.Format(_T("选中了第%d行"), nItem);                  
  12.             AfxMessageBox(str);         
  13.         }         
  14.     }  

获取单行选中行号的:

方法一:

[cpp]  view plain copy print ?
  1. CString str;   
  2.     int nIdx=m_List.GetSelectionMark();  
  3.     if (nIdx<0)  
  4.     {  
  5.         AfxMessageBox(_T("没有选中任何行"));    
  6.     }   
  7.     else  
  8.     {  
  9.         str.Format(_T("选中了第%d行"), nIdx);                  
  10.         AfxMessageBox(str);  
  11.     }  

获取选中的行号和列号:

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

[cpp]  view plain copy print ?
  1. DWORD dwPos = GetMessagePos();              
  2.     CPoint point( LOWORD(dwPos), HIWORD(dwPos) );                
  3.     m_List.ScreenToClient(&point);                
  4.     LVHITTESTINFO lvinfo;              
  5.     lvinfo.pt = point;             
  6.     lvinfo.flags = LVHT_ABOVE;                   
  7.     int nItem = m_List.SubItemHitTest(&lvinfo);              
  8.     if(nItem != -1)              
  9.     {                   
  10.         CString strtemp;                   
  11.         strtemp.Format(_T("单击的是第%d行第%d列"), lvinfo.iItem, lvinfo.iSubItem);                  
  12.         AfxMessageBox(strtemp);             
  13.     }   

方法二:

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

[cpp]  view plain copy print ?
  1. void Ctest111Dlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)  
  2. {  
  3.     LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);  
  4.     // TODO: 在此添加控件通知处理程序代码  
  5.   
  6.     NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;              
  7.     if(pNMListView->iItem != -1)             
  8.     {                   
  9.         CString strtemp;                   
  10.         strtemp.Format(_T("单击的是第%d行第%d列"),                                   
  11.         pNMListView->iItem, pNMListView->iSubItem);                   
  12.         AfxMessageBox(strtemp);             
  13.     }     
  14.   
  15.     *pResult = 0;  
  16. }  

更多推荐

[置顶] 获取CListCtrl选中行行号的多种方法

本文发布于:2024-02-14 06:39:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762150.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:置顶   多种   方法   CListCtrl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!