有两个dialog,第一个dialog要调用第二个dialog中输入的数据,为什么调用的变量的值为0?程序如下:
第一个DIALOG中:
void CMonte0521Dlg::OnButton1() 
{
UpdateData();
int i;
Czhengtai zt;
double *zhengtai=new double[m_SamNum];
double randf;
srand(GetTickCount());
for(i=0; i<num; i++)
{
randf=(double)(rand()/(double)RAND_MAX);
zhengtai[i]=zt.m_zhengtai1+zt.m_zhengtai2*randf;
}
zt.SamNum=zhengtai[0];
delete zhengtai;
m_MTBF.Format("%6.2f",zt.SamNum); 
UpdateData(FALSE);

}
...
void CMonte0521Dlg::OnSelchangeCombo1() 
{
// TODO: Add your control notification handler code here
int nIndex=m_Pattern1.GetCurSel();
switch (nIndex)
{
case 0: 
{Czhengtai zt;
if(zt.DoModal()==IDOK)
{ UpdateData();
}
}
break;
...
其中
m_zhengtai1,m_zhengtai2是弹出的第二个DIALOG中输入的EDIT的相关变量,运行后这个两个变量一直为0,为什么啊?小弟刚接触MFC不久,多谢帮助!

解决方案 »

  1.   

    第二个对话框中 定义一个全局对话框指针 CDialog2Dlg* dlg2;
    对话框初始化函数中 dlg1=this;第一个对话框通过这个指针来操作第二个对话框
    extern CDialog1Dlg* dlg2;

    dlg2->GetDlgItemInt(IDC_STATIC1,c);
      

  2.   

    for(i=0; i <num; i++) 

    randf=(double)(rand()/(double)RAND_MAX); 
    zhengtai[i]=zt.m_zhengtai1+zt.m_zhengtai2*randf; 
    } 我猜,zt就是第二个弹出对话框的对象吧。
    在使用zt.m_zhengtai1和zt.m_zhengtai2之前,你并没有对zt做任何操作啊,只是生成这个对象而已。你访问的值当然是默认值喽。
    我想你是想这样:Czhengtai zt; 
    if(zt.DoModal()==IDOK) 

        for(i=0; i <num; i++) 
        { 
            randf=(double)(rand()/(double)RAND_MAX); 
            zhengtai[i]=zt.m_zhengtai1+zt.m_zhengtai2*randf; 
        } 

      

  3.   

    对话框之间是如何关联的,是很重要的.如果是像标准控件一样,放在主窗口中的,应该Updatedata(TRUe)就行但是如果是DoModal()弹出的,你需要在弹出后,并点击了确定,再去读取.或者你直接你弹出的对话框中,发送消息以便让主窗口读取数据.
      

  4.   


    说的对也可以在CMonte0521Dlg类中定义一些成员变量来保存Czhengtai传过来的数据比如:
    CString m_zhengtai1;
    void CMonte0521Dlg::OnSelchangeCombo1() 

    // TODO: Add your control notification handler code here 
    int nIndex=m_Pattern1.GetCurSel(); 
    switch (nIndex) 

    case 0: 
    {Czhengtai zt; 
    if(zt.DoModal()==IDOK) 
    { UpdateData(); 
       m_zhengtai1=zt.m_zhengtai1;


    break; 
    ..........在别的地方就用m_zhengtai1就行了,不需要在定义Czhengtai 的对象
      

  5.   

    三楼的说得对,我就是想实现这个功能。在第一个DIALOG中使用第二个对话框的变量。前面说的用指针,该怎么用啊,能说得详细些吗?不好意思,学了一段时间的MFC,对它还是不怎么懂,谢谢各位
      

  6.   

    1楼的
    extern CDialog1Dlg* dlg2; 
    这个命令加在哪里?加在第一个dialog的头文件里的public下:
    error C2071: 'zt' : illegal storage class
    Monte0521Dlg.cpp
    不怎么懂,麻烦各位朋友再说细点好吗?谢谢
      

  7.   

    代码显示的内容是你想要在第一个对话框内获取第二个对话框的一些成员变量的值
    我觉得应该可以这样
    在第二个对话框的类中声明并实现获取这两个成员变量的方法
    double GetValue1st()
    {
        Updatedata(TRUE);
        
        return m_zhengtai1;
    }然后在第一个对话框中
    CZhengtai zt;
    double dbValue = 0.0;
    if (IDOK == zt.DoModal())
    {
        dbValue = zt.GetValue1st();
    }应该就可以了
      

  8.   


    用指针要麻烦一些。
    我想可以这样:
    假设:CDialog1,CDialog2
    步骤:
    1:可以为CDialog1声明一个CDialog2 *的指针变量。
    2:在CDialog1的OnInitDialog函数内new一个CDialog2,然后Create;
    3:当需要显示CDialog2的时候,就调用ShowWindow;
    4:CDialog2完成工作后,隐藏,并且通过消息通知CDialog1;
    5:CDialog1收到消息后,取得CDialog2的数据,进行自己的处理;
    6:记得销毁CDialog2窗口,并且释放new得到的内存。如果是我,我就这么做。