比如从A对话框一个按钮弹出B对话框(模式对话框),那么B对话框怎么访问A对话框的公有变量。怎么使用  GetParent()不行呢?

解决方案 »

  1.   

    如果你采用MFC来创建模式对话框的话,就不能用GetParent()来获得创建它的窗口。
    因为,MFC为了简化程序编写,DoModal根本没有传递任何参数。。
    MFC用获得活动窗口的方法取得父窗口。
    所以,最好还是给窗口B增加一个成员变量(指向A对话框的指针)。
    在创建的时候初始化。
    如:
    CMyDialog dlg;
    dlg.m_pParent=this;
    dlg.DoModal();
    //....
      

  2.   

    传递整个对象到没有必要,这样还要加入相应的头文件之类的东西,直接在B中定义一个与A中需要传递的参数相同类型的公有成员变量然后:
    CMyDialog dlg;
    dlg.m_var=var;       //后面的var即为A中要传过去的变量。
      

  3.   

    同意楼上建个变量在DOMODEL之前传过去就OK了。
    你也可以不用MFC。呵,那就方便了。
      

  4.   

    以前也遇到过这个问题 当时没有仔细想,
    当时用在app中设置全局变量来解决的  
    今天知道问题了 谢谢了
      

  5.   

    ???????????????????????????
    传递整个对象到没有必要,这样还要加入相应的头文件之类的东西,直接在B中定义一个与A中需要传递的参数相同类型的公有成员变量然后:
    CMyDialog dlg;
    dlg.m_var=var;       //后面的var即为A中要传过去的变量。
    这样传递过去之后 是否只能读,不能更改var的值?
    相当于"传值",而不是传"地址"
      

  6.   

    可以发送消息
    如果内容较为复杂,可以定义结构体
    比如 
    struct dlgParam
    {
    int xxx;
    ……
    }dlgParam param;SendMessage(hnd,WM_XXX,&param,NULL)
    收到消息再拆开我一般这么作
      

  7.   

    //对话框A
    Class A
    {
        CString strA;
    }//对话框B
    Class B
    {
        CString strB;
        strB=A.strA;   //不过首先要在B的.CPP文件中将A的.h引入
    }
      

  8.   

    to hrbniu(五彩神牛):
         你这样做,估计会有一个相互包含的问题。比如比如从A对话框一个按钮弹出B对话框(模式对话框),那么类A要包含类B的头文件。
    而   
    Class B
    {
        CString strB;
        strB=A.strA;   //不过首先要在B的.CPP文件中将A的.h引入
    }
      

  9.   

    CMyDialog dlg;
    dlg.m_var=var;       //后面的var即为A中要传过去的变量。 转递变量?这样会不会太耗内存。转递地址好不好?如:
      CMyDialog dlg;
    dlg.m_pVar=&var;       //后面的var即为A中要传过去的变量。