CListCtrl::SubItemHitTest
LVHITTESTINFO lvhti;
lvhti.pt = point;(point 为坐标)
int  iItem  = CListCtrl::SubItemHitTest(&lvhti);点击第一列的文字部分  得到的是正确的行数。
点击第一列的非文字部分,却得不到正确行数,得到-1.
请问是为什么啊?
还有 我有更好的方法知道 行和列吗

解决方案 »

  1.   

    void CXXXXDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    NMLISTVIEW* pListView = (NMLISTVIEW*)pNMHDR;
    if(-1 != pListView->iItem)
    {
    CString str;
    str.Format(_T("item: %d, subitem: %d"), pListView->iItem, pListView->iSubItem);
    AfxMessageBox(str);
    }
    *pResult = 0;
    }
      

  2.   

    // NM_CLICK
    void CXXXXDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    CPoint pt;
    GetCursorPos(&pt);
    m_list.ScreenToClient(&pt);
    LVHITTESTINFO lvhti;
    lvhti.pt = pt;
    m_list.SubItemHitTest(&lvhti);
    if(lvhti.flags & LVHT_ONITEMLABEL)
    {
    CString str;
    str.Format(_T("item: %d, subitem: %d"), lvhti.iItem, lvhti.iSubItem);
    AfxMessageBox(str);
    }
    *pResult = 0;
    }
      

  3.   

    if(lvhti.flags & LVHT_ONITEM)
      

  4.   

    初始化时使用这个函数把CListCtrl的样式设置一下:
    m_pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT);
      

  5.   

    谢谢您,
    不过还有个问题。
    1.我想用一次单击选中一行或者子项,若点到第一列则选中一行,若点到子项,则选中这个子项,再次单击,则子项编辑,或者仍然是行选中状态,没改变。并且不用 LVS_EX_FULLSELECT来这个风格。
    2.并且点击列标题,能选中这一列。
    3.第一列,不可编辑,并且是灰色。我想用 OnLButtonDown,OnCustomDraw,Cedit,来实现 。
    我用重画做会有很多异常。关于重绘的。能不能给我个详细的代码?麻烦了