int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
     m_strInView=m_strInDlg;//导出
}
书上说dlg.DoModal();函数直到对话框被清除后才返回.
那么执行到“导出”的时候,domodal返回了么。
如果返回了,m_strInDlg不就没有了么?
如果没返回,正在执行domodal函数,怎么能跳出来执行下面的语句呢?
我哪里错了,大虾指点出来啊!!!
DDX和DDV是什么时候起作用的。是onok()还是焦点转移的时候?
如果是onok(),那么假如我重定义onok还要调用鸡肋的onok。
一般是这样的语句吧:
{
    m_strInView=m_strInDlg;
    BaseClass::OnOk();
}
此时数据检验不就是在赋值之后了么,你可能要说检验不通过会跳回来的。
那么,先赋值后检验,不是有问题么??如果不合格,不是做了无用功么?
我哪里错了,大虾指点出来啊!!!

解决方案 »

  1.   

    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
         m_strInView=m_strInDlg;//导出
    }
    dlg是对话框类的一个实例,只有当DoModal()返回之后才能继续下面的语句
    这里只有当对话框是以“确定”按钮关闭的才会执行导出语句
    m_strInDlg应该是dlg.m_strInDlg吧?这样,在DoModal()之后,还是可以通过dlg这个对象来调用其public成员的。DoModal()只是dlg的一个成员函数,在dlg这个对象消亡之前,其public成员还是可以访问到的。
      

  2.   

    在DoModal()之后,dlg对象应该已经没有了吧。
    dlg.DoModal();函数直到对话框被清除后才返回.
    对话框都清除了啊
      

  3.   

    比如你一个工程,有一个对话框类,这个类就是一个cpp,然后还有一个主线程类,就是WinApp,你是在WinApp这个类中调用对话框类的,也就是在主线程中调用,这个dlg对象是在主线程中定义的。当然,如果主线程只有一个对话框,那么对话框没了,主线程也就结束了;但是,假如这个对话框是后来的,那么当对话框关闭,主线程不会结束的,而这个对话框对象还是在其生命周期中,可以访问的。dlg.DoModal()只是对话框的一个成员函数,你可以看作是一个显示对话框并处理数据的特殊函数,函数执行之后难道这个对象就不存在了?对话框没了只是这个函数的显示作用罢了。
      

  4.   

    那么,干什么还要把变量导出呢,直接用dlg.m_strInDlg不行么
      

  5.   

    这个变量看上去要在View类中一直使用,所以需要用一个类的成员来存储数据,而dlg一般都是局部变量,不可能在整个View类中存在,当dlg消亡之后,这个变量值就不存在了。
      

  6.   

    DDX和DDV是什么时候起作用的:
    是在UpdateData()时起作用的。应该是在基类的OnOK()中有了默认的UpdateData()。具体的机制我也说不清楚。
      

  7.   

    to heartwell(heartwell) 
    有同感,今天人很少
      

  8.   

    国庆,估计好多人去happy啦。注:我可不是加班啊,只是来侃侃