我想设置,点击ctrllist的时候选中的不是一行,而是一个单元格,谢谢回答!!

解决方案 »

  1.   

    中国人自己的CodeProject编程资料库
      

  2.   

    m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
      

  3.   

    在OnSelectChange中自己设定选中区域 
    学习中
      

  4.   

    谢谢楼上的,我要点击ctrllist的时候选中的是一个单元格,但是默认的只有第一列可以实现,其它的不行
      

  5.   

    不设置 LVS_EX_FULLROWSELECT 好了..
      

  6.   

    我写了俩段代码,但是有错误,谢谢大家给看下void CPropPage1::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NMITEMACTIVATE* nm=(NMITEMACTIVATE*)pNMHDR;

    invalidate_grid(m_sel_row,m_sel_col);
    m_sel_row=nm->iItem;
    m_sel_col=nm->iSubItem;
    invalidate_grid(m_sel_row,m_sel_col);
    MessageBox("123");
    *pResult = 0;
    }void CPropPage1::invalidate_grid(int row, int col)
    {
        CRect r;

    if(col==0)
    GetItemRect(row,&r,LVIR_LABEL);
    else
    GetSubItemRect(row,col,LVIR_BOUNDS,r);

    InvalidateRect(&r);
    }
      

  7.   

    报错,说, GetItemRect(row,&r,LVIR_LABEL);
    和GetSubItemRect(row,col,LVIR_BOUNDS,r);
    未定义
      

  8.   

    这个问题我来帮你解决:
    下面是一段单击鼠标左键即选中List控件中的单元格的代码:(类似于点击Excel表格)
    void CListView::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    LVHITTESTINFO info;
    CListCtrl &listctrl=GetListCtrl();
    info.pt=point;
    info.flags=LVHT_ONITEMLABEL;
    if((listctrl.SubItemHitTest(&info))>=0)
    {
        int col=info.iSubItem;  //当前列
                int row=info.iItem;  //当前行
        CString s;
                s.Format("你选择了第%d行,第%d列!",row,col);
                AfxMessageBox(s);
    }
    CListView::OnLButtonDblClk(nFlags, point);
    }
    这里主要用到了LVHITTESTINFO 类.