UpdateData()必须在对话框存在的情况下调用,执行DoModal()后窗口已销毁。

解决方案 »

  1.   

    你应该在另一个对话框中调用
    void COtherDlg:ReurnVal() 

     CDlgThis  dlg;
    if (dlg.DoModal()==IDOK )
    {
    copy dlg data members;
    ....... 
    UpdateData(FALSE); 
    } }
      

  2.   

    MFC不是有Dialog Data Exchange机制吗?为什么不用?
      

  3.   

    copy dlg data members!!
    是是么意思??我应该怎样做呢??
    我是新手,所以嗯,不太明白!!
    谢谢!!!
    怎样用Dialog  Data  Exchange机制呢??我该怎么办??
    我再现等待!!各位大哥的回答!!!
      

  4.   

    copy dlg data members!!
    是是么意思??我应该怎样做呢??
    我是新手,所以嗯,不太明白!!
    谢谢!!!
    怎样用Dialog  Data  Exchange机制呢??我该怎么办??
    我再现等待!!各位大哥的回答!!!
      

  5.   

    解决这个问题有两种方法.
    第一种方法是设置全局变量,这个比较简单,还是不说的好。
    第二种方法就是:
      假设类CTestDlg,要调用CTest1Dlg中的变量CString m_str。当然这个变量m_str是和某一编辑框有联系的,你当然可以举一反三。
      1. 在CTest1Dlg类中加入一函数CString GetStr()(函数名随便);代码如下:
         CString  CTest1Dlg::GetStr()
         {
           return m_str;
         }
        2.在CTestDlg中要调用CTest1Dlg中的m_str的函数中加如下代码:
      void CTestDlg::OnButtonSet()
        {
           CString str;
           CTest1Dlg dlg;
           if(dlg.DoModal()==IDOK)
            {
              str=dlg.GetStr();
              //使用变量str;
             }
        }
        
      

  6.   

    Dialog Data Exchange机制是很简单的一个问题。当你把某个变量和控件联系起来之后,如编辑框,VC就会在类的DoDataExchange(CDataExchange* pDX)函数中加入一些东东,如下:
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CTest1Dlg)
    DDX_Text(pDX, IDC_EDIT1, m_str);
    //}}AFX_DATA_MAP
    }当你在函数的构造函数中初始化m_str后,窗口初始化后就调用DoDataExchange函数,所以你就会见到在编辑框中的值就是m_str,当你按OK按钮后,在窗口关闭后也会调用DoDataExchange,把编辑框中的值赋给m_str.UpdateData(FALSE)和UpdateData(TRUE),也可以在编辑框和m_str之间传值。 
      

  7.   

    UpdateDate()必须在对话框存在的情况下调用,
    你可以在子对话框中定义一个指向父对话框的指针。
    将变量值传递后,用UpdataDate()函数更新这个指针
    对应的变量就可以了!
      

  8.   

    什么什么啊,思路一篇混乱。
    void CChuShi::ReturnVal() 

    if( DoModal()==IDOK )

    UpdateData(TRUE); 

    else 

    UpdateData(FALSE); 


    显然,这个DoModal()是类CChuShi的函数。
    DoModal()调用意味着再创建一个自己。
    可能是外部调用的ReturnVal()来显示一个对话框,但是,在DoModal()
    过后,对话框已经销毁,不存在了,包括他的子窗口。又怎么让它进行数据交换呢?
    DoModal()后,对话框自己会进行数据交换(当然,要选择了IDOK),不用你再去费心。
      

  9.   

    CDlgThis dlg; 
    dlg.xxx = 1;
    dlg.yyy = 1;
    if (dlg.DoModal()==IDOK ) 

    xxx = dlg.xxx;
    yyy = dlg.yyy;

    在处理OnOk之前要给dlg.xxx和dlg.yyy设上值,如果是关联控件的话,应该updatedata(false);
      

  10.   

    呃。。我不知道啦,不过我记得UpdateData()和UpdateData(FALSE); 是连在一起的。可以这麽使用吗?
      

  11.   

    CChuShi:m_Variable1...
    COtherDlg:m_Varible1...
    实现过程
    void CChuShi::ReturnVal() 

       COtherDlg dlg;
       if(dlg.DoModal()==IDOK) 
       { 
          m_Variable1=dlg.m_Varialbe1;
          ......
       } 
      

  12.   

    ChuShi:m_Variable1... 
    COtherDlg:m_Varible1... 
    实现过程 重载COtherDlg的OnOK()函数void COtherDlg::OnOK()
    {
       UpdateData(true);
    }void CChuShi::ReturnVal() 

    COtherDlg dlg; 
    if(dlg.DoModal()==IDOK) 

    m_Variable1=dlg.m_Varialbe1; 
    ......