第一列为项目,第二列为次数,要求双击第一列的每一行都产生一个小对话框,输入次数显示在对应的第二列上。

解决方案 »

  1.   

    响应NM_DBLCLK消息,NMITEMACTIVATE结构中的iItem、iSubItem就是行、列号。
      

  2.   

    int Row=m_list.GetSelectionMark(); //这样可以获取你点击的那一行 
      

  3.   

    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    pNMLV->iItem //行号
    pNMLV->iSubItem //列号
      

  4.   

    在弹出对话框如果你是用编辑框作为输入次数的话,为编辑框添加EN_CHANGE消息响应
    如:
    void CAnalogy::OnChangeEdit5()
    {
    CString str;
    GetDlgItem(IDC_EDIT1)->SetWindowText(str);
    CDlgList *p=(CDlgList *)GetParent(); //获得Listctrl控件所在对话框的指针
    int Row=p->m_list.GetSelectionMark(); //这样可以获取你点击的那一行 
    p->m_list.SetItemText(Row,2);
    }
      

  5.   

    int Row=m_list.GetSelectionMark(); 
    m_list.SetItemText(Row,1,"你的次数放这"); //BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszText);
      

  6.   

    更正:
    p->m_list.SetItemText(Row,2,str); 
      

  7.   

    打球去了刚才,不好意思。 cdlglist是什么东西啊,系统提示不正确
      

  8.   

    cdlglist 就是你CListCtrl控件所在的对话框的类,上面函数体你也可以在点击OK按钮时处理还有就是不要忘记添加cdlglist 类的头文件
      

  9.   

    加了EN_CHANGE输入一个数字整个程序就关了,怎么回事啊
    而且这段代码加到按钮的消息响应函数里也不起作用阿
      

  10.   

    假设你编辑框所在的对话框类是CDlgA
    那你可以在双击函数中处理看看
    #include "DlgA.h"
    CDlgA dlg;
    if(dlg.DoModal()==IDOK)
    {
    CString str; 
    GetDlgItem(IDC_EDIT1)->SetWindowText(str); 
    CDlgList *p=(CDlgList *)GetParent(); //获得Listctrl控件所在对话框的指针 
    int Row=p->m_list.GetSelectionMark(); //这样可以获取你点击的那一行 
    p->m_list.SetItemText(Row,2,str); }
      

  11.   

    sorry 假设你编辑框所在的对话框类是CDlgA 
    那你可以在双击函数中处理看看 
    #include "DlgA.h" 
    CDlgA dlg; 
    if(dlg.DoModal()==IDOK) 

    CString str; 
    GetDlgItem(IDC_EDIT1)->SetWindowText(str); 
    int Row=m_list.GetSelectionMark(); //这样可以获取你点击的那一行 
    m_list.SetItemText(Row,2,str); 
    }
      

  12.   

    #include "CDD.h" //CDD 就是你CListCtrl控件所在的对话框的类,以下是在编辑框所在对话框的“确定”按钮中处理函数体void CDlgA::OnOK() //CDlgA为编辑框所在对话框的类 
    {
    // TODO: Add extra validation here

        CString str;
       CDD *p=(CDD *)GetParent();
        GetDlgItem(IDC_EDIT1)->GetWindowText(str);
        int Row=p->m_statuslist.GetSelectionMark(); //这样可以获取你点击的那一行 
        p->m_statuslist.SetItemText(Row,2,str); 
     CDialog::OnOK();
    }我刚给你这样做了,测试通过我试了一下上面我给的代码,GetDlgItem(IDC_EDIT1)->SetWindowText(str); 这句话不能取得编辑框的内容。
      

  13.   

    //1、list ctrl初始化时要设置全行选中风格:
    m_wndListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);//2、处理list ctrl的NM_DBLCLK消息:
    void CMYDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        // TODO: Add your control notification handler code here
        LPNMLISTVIEW pNMListView = (NM_LISTVIEW *)pNMHDR;    CString strText;
        //是否点击了有效的项目。
        if (pNMListView->iItem == -1)
        {
            AfxMessageBox("你没有点击任何项目");
        }
        else
        {
            //获取所点击的行和列的例子。
             strText.Format("你点击了第%d行", pNMListView->iItem);
            AfxMessageBox(strText);        strText.Format("你点击了第%d列", pNMListView->iSubItem);
            AfxMessageBox(strText);        //在这里显示对话框。可以使用GetDlgItemInt获取在文本框控件中输入的次数。
            //然后使用CString strNumber; strNumber.Format将次数转换为字符串。
            //最后使用m_wndListCtrl.SetItemText(pNMListView->iItem, 1, strNumber);设置第1列(次数列)的值。
        }    *pResult = 0;
    }
      

  14.   

    //在CDD的OnInitDialog函数中为CListctrl控件设置为整栏选择和网格线DWORD ExStyle =m_statuslist.GetExtendedStyle();
    m_statuslist.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);