我的问题:
我在一个无模式对话框modless1中产生另外一个无模式对话框modless2,我在modless2中的edit中写入一些内容,然后单击OK按钮就能将此edit中的内容添加到modless1中ListBox中因为这是无模式对话框我不能采用:
if(modless2.DoModal()==IDOK)
{
  modless1.m_listbox.AddItem(modless2.edit);
}
请问高手我遇到此种问题,我怎么解决?
---------------------------------------
一位高手的解答:
在modless2的OnOK中加入:
   UpdateData(FALSE);
   pListBox = (CListBox*)AfxGetMainWnd()->GetDlgItem(IDC_LISTBOX);
   pListBox->AddItem(m_strEditText);
并且不要调用CDialog::OnOK();
m_strEditText为与medless2中edit绑定的变量。
-------------------------------
我单步执行到   pListBox = (CListBox*)AfxGetMainWnd()->GetDlgItem(IDC_LISTBOX);
   发现pListBox的地址为0x00000000,出现Access violation,这是怎么回事?

解决方案 »

  1.   

    不是AfxGetMainWnd()->GetDlgItem(IDC_LISTBOX);而是this->GetDlgItem(IDC_LISTBOX);
      

  2.   

    你应该在modless2中保存指向modless1的指针,然后:pmodless1->SetListBox(str);然后在modless1添加一个成员函数:SetListBox(CString str)
    {
        m_listBox.AddString(str);
    }
      

  3.   

    用sendmessage,
    将modless1的m_hWnd给modless2,然后
    在modless2里sendmessage,第一个参数是modless2EDIT的值
      

  4.   

    这样一来你就不用关闭modless2,在ONKILLFOUS里就可在modless1里的LISTBOX加东西
      

  5.   

    pListBox = (CListBox*)AfxGetMainWnd()->GetDlgItem(IDC_LISTBOX);
    ---->
    pListBox = (CListBox*)GetDlgItem(IDC_LISTBOX);
      

  6.   

    为modeless2类添加成员CDialog *m_pDlg,修改modeless2构造函数,如
    CModeless2(CDialog *pDlg)
    {
        m_pDlg = pDlg;
    }
    在modeless1中如此使用
    CModeless2 dlg2(this);
    只需m_pDlg->GetDlgItem(IDC_LISTBOX);
      

  7.   

    try as  ukyoking(东方不败) .不过感觉应该是通过类似的方法得到modeless1的指针?因为它是要向modeless1中加东西!ListBox在modeless1。
    ----------------------------------------
    AfxGetMainWnd()->GetDlgItem(IDC_LISTBOX);
    也不是什么情况都用的。你连本身的AfxGetMainWnd()都不确定,怎么还能用它来得到其他的指针?谁GetDlgItem,他自己先要确定。m_pDlg->GetDlgItem
    只要m_pDlg能正确的保留modeless1的指针就可以。---------------------------------还要说明,UpdateData(FALSE);的更新放到那两句后面,
    有时更新也可以使对象销毁,销毁了还怎么操作呢?这些你的试试!