创建了对话框类A(含有字符串型成员变量,与控件关联的整形变量,都为public),对话框类B(含有字符串型成员变量,与控件关联的整形变量都为public),属性表单类C(与控件关联的整形变量都为public),并将属性表单转化为向导,对话框类D,当点击A中一按钮时弹出模态对话框B,当点击B中一按钮时弹出模态对话框C,当点击C中完成按钮时弹出模态对话框D,请问如何将A,B,C中的成员变量传给D?
大家帮帮忙啊,弄了好长时间都没解决。不胜感激啊!

解决方案 »

  1.   

    示例:
    //灵活运用SetWindowLong和GetWindowLong
    typedef struct {
            int a;
            TCHAR sza[256];
            HWND hwnda;
            WNDPROC wndproc;
    }MYDATA;MYDATA * pData;  //假设这个结构中包含了你所有要传递的数据。//////////////////////////////////////////////////////////
    // Dialog A 把数据传给 Dialog B// 在Dialog A 中分配一块内存。pData = new MYDATA;
    pData.a      =...
    pData.hwnda  =...
        ... ...
    pData.WndProc = wndproc;// 将该值传递给Dialog 2SetWindowLong ( hDialog2, //Dialog2 的句柄
                      GWL_USERDATA,
                    (LONG)pData);////////////////////////////////////////////////////
    // 在 Dialog2 中使用 GetWindowLong 取出数据就可以了。
      

  2.   

    按钮A
    {
        //创建窗B;
        B.data = A.data;
        B.ShowModal();
    }按钮B
    {
        //创建窗C;
        C.data = B.data;
        C.ShowModal();
    }//同理
    按钮C
    ...
      

  3.   

    1.如何在一个模态对话框关闭后还能用到它里面的值?
    答:模态对话框可以在关闭后将值传递给紧接着打开的对话框。如将CDialog1中的值m_username传递给紧接着要打开的对话框CDialog2,在CDialog2中定义一个成员变量m_username2.
    在CDialog2的OnInitDialog函数的CDialog::OnInitDialog();后面加如下代码:
    CDialog1 dlg;
    m_username2=dlg.m_username;
    当然不要忘了头文件#include "Dialog1.h"
    如果你不是将值传给紧接着后面打开的对话框,那么你可以先传给后面的,再后面的又传给它后面的,这样一步一步的就可以到达,你要传值的那个对话框。2.如何获取主对话框中的值。
    答:如主对话框为CMainDlg,值为m_username1,子对话框为CSubDlg,值为m_username2:
           CMainDlg *dlg=   (CMainDlg*)(AfxGetApp()->GetMainWnd()); //取得主窗口线程句柄 
          m_username2=dlg->m_userName1;
     外部数据传给对话框只要在对话框初始化完成之后,DoModal或者Create之前直接给对话框相应的数据成员赋值就行了.前提是对话框的数据成员要设置为public.
    另外.自己写构造函数需要初始化基类部分的成员.
    比如从CDialog继承一个类CTestDialog,并且有一个需要以外部数据初始化的成员int nExternelInit;
    那么其构造函数这么写:
    CTestDialog::CTestDialog(CWnd* pParent, int nExternel) : CDialog(CDialog::IDD, pParent),nExternelInit(nExterlnel)
    {
    //....
      

  4.   

    太谢谢各位的回帖,但我刚学mfc不久,想用一种最简单明了的方法,复杂的不懂,也容易出错啊。还望大家详细说说啊!
      

  5.   

    1.theApp里设置成员变量给所有对话框共享
    2。全局变量
    3.修改对话框构造函数,用结构体传参
      

  6.   

    在App类里定义成员变量,在其他类中“theApp.成员变量”便是一个全局变量,通过赋值,“theAPP.成员变量”可以在其他类中调用使用。
      

  7.   


    最简单的方法是全局变量。在A窗口中声明一个变明int g_val;在B窗口中声明外部变量extern int g_val;g_val 就可以由A窗口和B窗口访问。
      

  8.   

    还是声明一个全局变量吧!比较简单:
    比如在你的CxxApp类文件里声明变量:
    CString str;
    在你引用时加上代码:
    CxxApp *app = (CMyApp *)AfxGetApp();
    app->str = 你要用的值;app->str就可以用了