处理NM_DBLCLK消息 NMLISTVIEW *pItem = (NMLISTVIEW *)pNotifyStruct;
pItem->iItem; //就是你双击的项目的Index

解决方案 »

  1.   

    这是写在ListCtrl类下的WM_LBUTTONDBCLK的消息处理函数
    void CParamListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    CString str;
    LVHITTESTINFO lvhti;
    // Clear the subitem text the user clicked on.
    lvhti.pt = point;
    SubItemHitTest(&lvhti);
    if (lvhti.flags & LVHT_ONITEMLABEL)
    {
    int m=lvhti.iItem;
    int n=lvhti.iSubItem;
    str=GetItemText(lvhti.iItem, lvhti.iSubItem);

    }
    AfxMessageBox(str); 
    //str=GetItemText(m,n);

    CListCtrl::OnLButtonDblClk(nFlags, point);
    }
    上面这种方法是可行的
    用NM_DBLCLK消息不好取值
      

  2.   

    我是处理NM_DBLCLK消息 ,但STR为空。
      

  3.   

    处理NM_CLICK消息 NMLISTVIEW *pItem = (NMLISTVIEW *)pNotifyStruct;
    pItem->iItem; //就是你双击的项目的Index 
      

  4.   


    你的错误在于没有理解 GetItem 这个函数的用法
    用这个函数以前一定要先将 LVITEM 的一部分结构填充了才可以得到正确的值
    应该这样用(你必须指定你要读的 item 及 subitem 以及你要读取的内容)int selected = m_ListView.GetNextItem( -1 , LVNI_SELECTED | LVNI_ALL );
    if(selected != -1)
    {
       LV_ITEM lvi;
       char text[MAXTEXT];
       lvi.iItem = selected;
       lvi.pszText = text;
       lvi.iSubItem = 0;// modify this for any subitem you want read.
       lvi.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE | LVIF_TEXT;
       lvi.stateMask = LVIS_CUT | LVIS_DROPHILITED |
    LVIS_FOCUSED | LVIS_SELECTED |
    LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK;
       GetItem(&lvi);
    }如果你没法确定 item 的最大字符数,就应该把上面的 lvi.mask 中的 LVIF_TEXT
    去掉,这样读内容
        CString tempstr = GetItemText(selected,0);
      

  5.   

    问kingzai,为什么用NM_DBLCLK消息不好取值????
      

  6.   

    虽然,你不会给我 150 分,我还是告诉你了,哈哈,推荐的使用方法是
    单独用 GetItemText 读取字符串int selected = m_ListView.GetNextItem( -1 , LVNI_SELECTED ¦ LVNI_ALL );
    if(selected != -1)
    {
      LV_ITEM lvi;
      char text[MAXTEXT];
      lvi.iItem = selected;
      lvi.pszText = text;
      lvi.iSubItem = 0;// modify this for any subitem you want read.
      lvi.mask = LVIF_IMAGE ¦ LVIF_PARAM ¦ LVIF_STATE;
      lvi.stateMask = LVIS_CUT ¦ LVIS_DROPHILITED ¦
                      LVIS_FOCUSED ¦ LVIS_SELECTED ¦
                      LVIS_OVERLAYMASK ¦ LVIS_STATEIMAGEMASK; 
      m_ListView.GetItem(&lvi);
      CString tempstr;
      DWORD data;
      tempstr = m_ListView.GetItemText(m_iItemDrag,0);
      data = m_ListView.GetItemData(m_iItemDrag);
    }
      

  7.   

    问Gu_c_h,当前如果iSubItem是未知的怎么办,其值是用户在CLISTCTRL上点击的。
      

  8.   

    响应双击消息加:
    {
    CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem(IDC_YOURLISTCONTROL);
    ASSERT(pListCtrl != NULL);POSITION pos = pList->GetFirstSelectedItemPosition();
    if (pos == NULL)
       TRACE0("No items were selected!\n");
    else
    {
       while (pos)
       {
          int nItem = pList->GetNextSelectedItem(pos);
          TRACE1("Item %d was selected!\n", nItem);
          // you could do your own processing on nItem here
       }
    }
    }
      

  9.   

    再用GetItemText, GetItem等取别的。
      

  10.   


    如果你一定要这样用就可以检查返回的 lvi
    如果 lvi.state & LVIS_SELECTED == TRUE 
    则该项被选中,你必须循环测试每一项
      

  11.   

    谁能帮我判断被选中项的iSubItem,150分就给谁。
      

  12.   

    pList.GetItemRect(...)//好象有GetSubItemRect()这个函数
    GetCursorPos(...)
    if(rc.PtInRect(...))
    {
      .....
    }
      

  13.   

    int selected = m_ListView.GetNextItem( -1 , LVNI_SELECTED | LVNI_ALL);
    if(selected != -1)
    {
      CString tempstr;
      DWORD data;  LV_ITEM lvi;
      lvi.iItem = selected;
      lvi.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
      lvi.stateMask = LVIS_CUT | LVIS_DROPHILITED |
                      LVIS_FOCUSED | LVIS_SELECTED |
                      LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK; 
      int columncount = ((CHeaderCtrl*)m_ListView.GetHeaderCtrl())->GetItemCount();
      for(int i = 0 ; i < columncount ; i++)
      {
         lvi.iSubItem = i;
         m_ListView.GetItem(&lvi);
         if(lvi.state & LVNI_SELECTED)
         {
            tempstr = m_ListView.GetItemText(m_iItemDrag,0);
            data = m_ListView.GetItemData(m_iItemDrag); 
            break;
        }
     }  
    }
      

  14.   

    定义结构LVHITTESTINFO lvhti;
    先lvhti.pt=point;
    然后SubItemHitTest(lvhti);
    int n=lvhti.iSubItem;
    n就是被选中项的iSubItem.