void CMp3TideDlg::OnNMDblclkList2(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
CString row, col;
row.Format("%d", pNMLV->iItem);
AfxMessageBox(row); *pResult = 0;
}为什么不论我双击哪里,都显示-1!!!(我想得到双击项所在的行号及列号)

解决方案 »

  1.   

    int   index   =   lMx.GetSelectionMark();//所选中的行号   
    if(index < 0) index =0 ;
    dMzsf->pYaopin = ypdict.at(index);
    OnOK();
      

  2.   

    响应 NM_DBLCLK消息,
    消息函数:
    {
    *pResult = 0; CPoint point;

    GetCursorPos( &point );
    m_ListShow.ScreenToClient( &point );
    LVHITTESTINFO info;
    info.pt = point;
    if ( m_ListShow.SubItemHitTest(&info) != -1 )
    {
    if ( (info.flags & LVHT_ONITEMLABEL) == 0 )
    {
    return;
    }

    info.iItem;   // 行号
    info.iSubItem;// 列号
            }
    }
      

  3.   

    刚试过可以啊,你是不是没有用:m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
    这样的话,你只会在第一列双击的时候才是选中ITEM的状态.为了验证你获得的数据是否正确,你可以加一句:
    LPNMLISTVIEW pNMLV = reinterpret_cast <LPNMLISTVIEW>(pNMHDR); 
    CString row, col; 
    row.Format("Item=%d  ", pNMLV->iItem); 
    col.Format("SubItem=%d",pNMLV->iSubItem);
    CString str=row+col;
    AfxMessageBox(str);  *pResult = 0;
    这样看看SUBITEM对不对,就知道什么事了.
      

  4.   

    本帖最后由 Mackz 于 2008-08-21 10:24:16 编辑
      

  5.   

    没有添加 m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT); 因为我想单独操作一项而非一行!
    不过,添加上确实可以!但不是我本意·
      

  6.   

    我倒,,你没有添加这句的话,对系统来说,你的点击非选中操作,就是说你那时点击的区域虽然是属于那一行的,但是这一行并未选上,所以返回值是-1是正确的.
    那你的本意是什么?如果想点击后得到当前行,列,那设置了m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);有何不可?否则,你就要进行自已的扩展操作了,通过当前的POINT来确认当前的行,这样就麻烦多了.
      

  7.   

    对了,你点击第一列就会发现ITEM被选中,而且返回不是-1的了.呵呵.