这个简单,首先为你的ListCtrl 添加NM_CLICE消息,
然后,写如下的代码:
void CYouListView::OnClickListMain(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
NMITEMACTIVATE *pItemActive = (NMITEMACTIVATE *)pNMHDR;
CString str;
str.Format("您点击的是 %d 行 %d 列 ",pItemActive->iItem+1,pItemActive->iSubItem+1);
MessageBox(str);
*pResult = 0;
}

解决方案 »

  1.   

    to Tasehouny(阿甘):
    不对啊,pItemActive->iItem在单击subitem是总是-1啊??
      

  2.   

    简单的方法是
    重写onclick
    int count=GetItemCount();
    LVITEM item;
    memset(&item,0,sizeof(item));
    item.mask=LVIF_STATE|LVIF_PARAM;
    for(int i=0;i<count;i++)
    {
    item.iItem=i;
    item.stateMask=LVIS_SELECTED;
    if(!GetItem(&item))
    continue;
    if(!(item.state&LVIS_SELECTED))
    continue;
    }
    i就是第几行
    int j;//找一下有几个列
    RECT rc;
    for(int k=0;k<j;k++)
    {
       GetSubItemRect(i,k,LVIR_BOUNDS,rc);       
       //然后用鼠标的点击位置判断是否在rc内就ok了
    }
    //快给分兄弟
      

  3.   

    可以取click时的鼠标坐标,
    根据
    clistctrl::GetItemCount()
    clistctrl::GetItemRect(prect)
    clistctrl::GetColumnCount()
    算出来,好象有点笨
      

  4.   

    这样找行是不是快点
    CPoint ptAction;
    UINT nFlags;
    GetCursorPos(&ptAction);
    m_list.ScreenToClient(&ptAction); int index = m_list.HitTest(ptAction,&nFlags);//行的index(0,1,2,,,,)
      

  5.   

    在这样得到列
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    int ncolumnno = pNMListView->iSubItem;
      

  6.   

    各位兄弟,给分不要着急,分总会给的!!!!问题答案我自己找到了,用SubItemHitTest函数是最简单的,可我还是怀疑我的用法是否是最简单的,按我的理解在NM_CLICK的响应函数中应该能得到列和行的,可居然得不到,真是奇怪!!所以才有我上面的提问!!!!