在对话框应用程序中在建一个对话框,点击OK按钮弹出该对话框。我想把主对话框类的一个成员变量的值传给弹出的对话框的EDIT控件上的变量,如下:
void CMyDlg::OnOK() 
{
// TODO: Add extra validation here
m_main="asd";
CCdlg dlg;     //CCdlg为子对话框的类
if(IDOK==dlg.DoModal())
{
dlg.m_cstr=m_main;//m_cstr为edit控件上的变量

}
CDialog::OnOK();
}
为什么程序运行到子对话框类中后,m_cstr值为空呢?怎样将主对话框的变量值传给主对话框类?

解决方案 »

  1.   

    if(IDOK==dlg.DoModal()) 
    DoModal()完毕后,你才给它赋值,
    把dlg.m_cstr=m_main;放在调用DoModal之前;void CMyDlg::OnOK() 

    // TODO: Add extra validation here 
    m_main="asd"; 
    CCdlg dlg;    //CCdlg为子对话框的类 
    dlg.m_cstr=m_main;//m_cstr为edit控件上的变量 
    if(IDOK==dlg.DoModal()) 



    CDialog::OnOK(); 
    } PS:搜一下弄清楚什么是模式对话框和非模式对话框, :)
      

  2.   

    dlg.m_cstr=m_main;
    再if(IDOK==dlg.DoModal())
    {
    } 或者
    if(IDOK==dlg.DoModal())
    {
    dlg.m_cstr=m_main;//m_cstr为edit控件上的变量
    dlg.UpdateData(); } 
      

  3.   

    CCdlg dlg;    //CCdlg为子对话框的类 
    dlg.m_cstr=m_main;//m_cstr为edit控件上的变量 
    if(IDOK==dlg.DoModal()) 
    { } 
      

  4.   

    dlg.m_cstr=m_main后面加上
    UpdateData(false);
      

  5.   

    1.可以在创建这个对话框的构造函数里加上参数,用于传递
    CCdlg::CCdlg(CString Name ,CWnd* pParent /*=NULL*/)
    : CDialog(CCdlg::IDD, pParent),
    m_cstr(Name)
    {}CCdlg dlg(m_main);2.可以在弹出对话框实现部分获取主对话框指针来赋值CCdlg::OnInitDialog()
    {
      CMyDlg* parent = (CMyDlg*) GetParent();
      m_cstr = parent->m_main;
    }