我在对话框1里想得到对话框2里一个combobox(有值了)控件的值:
方法1
CDlg2* dlg2=(CDlg2*)AfxGetApp()->GetMainWnd();
dlg2->m_combobox.GetWindowText(string);
编译通过,运行出错方法2:
CDlg2* dlg2=(CDlg2*)AfxGetApp()->GetMainWnd();
CComboBox *pWnd=&dlg->m_combobox; 
pWnd->GetWindowText(string);
同样也是编译通过,运行出错
请问问什么???
怎么解决??
最好给出代码,谢谢了先!!

解决方案 »

  1.   

    CDlg2* dlg2=(CDlg2*)AfxGetApp()->GetMainWnd();我认为可能两个对话框之间并没有这种关系。
    至于编译能通过是因为你用了强制类型转换。
    其实你现在得到的dlg2不是指向第二个对话框的指针要保证上述代码可用,应该在创建对话框1时把对话框2的窗口指针传入构造函数
      

  2.   

    hehe最简单得办法把 combo box 定义一个 整型变量 就相当于 一个 enum 变量UpdateData(1); 得到这个变量得值  之后 ,传 给 对话框 1  就行了 
      

  3.   

    假如 ,点击第一个 对话框的 一个 按钮 ,把一个 edit里 的值记录下来并打开第二个窗口 , 在第二个窗口里 有一个 edit,  这个edit 取值前面那个 edit代码 在 按钮的 OnBnClickbuttonname(){
        UpdateData(1); // 把 自己edit的值记录下来
        OnOK();        // 根据需要,关闭当前窗口
        CMydlg2 dlg;   // 创建 第二个窗口类的一个实体
        dlg.str = str1;  // 给这个实体的 edit窗口变量 赋值
        dlg.DoModal();  // 显示这个实体
    }
      

  4.   

    你说的dlg1是dlg2上弹出的modal dlg吗?
    如果是:
    //in Dlg2.cpp
        #include "Dlg1,h"
        ....
     CDlg2::FunXXX();
    {
         CDlg1 dlg(this);
         dlg.DoModal();
    }//in dlg1.h  添加成员变量
        class CDlg2;//预引用
        ....
        CDlg2* m_pPar;
    // in dlg1.cpp
        //在默认的构造函数中添加下面这句
        m_pPar = pParent;
        //在需要使用的地方
        m_pPar->m_combobox.GetWindowText(string);