void CLocFileView::OnDblclkLocFile(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NMLVDISPINFO* pLocInfo=(NMLVDISPINFO*)pNMHDR;
CString str,buf;
int iIcon,iIconSel;
str.Format("%d",pLocInfo->item);
if(str=="-1")
return;
int nItem=atoi(str);
DWORD dwFlag=m_ctLocFile.GetItemData(nItem);//Get the lParam member of the    LVITEM struct
}
为什么这里用str.Format("%d",pLocInfo->item);得到点击的是那一行?
这样得到的应该是LVITEM 结构的mask成员吧?但是用int ii = pLocInfo->item.iItem ;
为什么不行呢?

解决方案 »

  1.   

    那个是在change的消息响应中用的。你现在的olditem和newitem都用不上
      

  2.   

    olditem 和newitem是指什么?那为什么用str.Format("%d",pLocInfo->item);(应该是mask的值)却可以呢?
      

  3.   

    pLocInfo->item.iItem 是什么啊?
      

  4.   

    typedef struct tagNMLISTVIEW {
      NMHDR hdr;
      int iItem;
      int iSubItem;
      UINT uNewState;
      UINT uOldState;
      UINT uChanged;
      POINT ptAction;
      LPARAM lParam;
    } NMLISTVIEW, FAR* LPNMLISTVIEW;
      

  5.   

    pLocInfo->item是一个LVITEMW结构,正如你所说
    str.Format("%d",pLocInfo->item);
    中,str得到的是mask的值。而其实这时候iItem,iSubItem,lParam以及pszText的值都是空的。因为这个结构赋值的原则是根据mask的设定来赋值,由于并没有于先设定mask,所以这些值自然都是空的
      

  6.   

    但是为什么此时mask的值却是所选的行呢?这点在msdn并没有说明啊?msdn上只说明了mask的几种情况。
      

  7.   

    为什么mask的值却是所选的行呢?
    不懂,只是猜测会不会是因为mask处在这个结构体的首位置。
      

  8.   

    我也不懂,但事实上却是这样。其他的成员的值都没有意义。随着点的行不同,mask的值也在变而且会出现mask不可能出现的值(也就是超出msdn上面所说的那些值)。