有关2个窗口传值的。
我在主窗体用  dlg.DoModal(); 打开了一个子窗体
在子窗体里有个CEdit的控件a 和一个btn,按btn 将a的值返回给主窗体的另一个CEdit控件b里面,怎么做?

解决方案 »

  1.   

    假如点dlg1上的按钮,出现dlg2,dlg2上有个Edit框,给dlg2的Edit框添加变量CString m_strData; dlg2出来后,往Edit框里输入字符,输入好以后,点确定那么,dlg1上的按钮的代码是:
    CMydlg2 dlg2;
    CString str;if(dlg2.DoModal() == IDOK)
    {
    str = dlg2.m_strData;
    }
      

  2.   

    其实这就是个类的操作,理解了类的生存周期就明白了,Dialog执行DoModal(),你点确定或者取消后,对话框消失了。但是对话框类对象并没有析构。获取一个类的成员变量的值你因该明白怎么做吧?
      

  3.   

    哦,谢谢诸位,我刚开始学,啥也不懂不过,要求不用默认的ok键。就是自己写个函数
    /////////////////////////////////////////////////////////////////////////////
    // CSendDlg message handlers 
    // 这个是要弹出的子窗口 ,激活这个函数 要关闭窗口返回 主窗口并且把
    //  IDC_CEDIT_MSG的值传回去
    void CSendDlg::OnCbuttonSend() 
    { // TODO: Add your control notification handler code here
     CString y;
     GetDlgItem(IDC_CEDIT_MSG)->GetWindowText(y);}
    那应该怎么返回呢// 这个是主窗口调出子窗口的函数
    void CSettingDlg::OnCbuttonSetting() 
    { // TODO: Add your control notification handler code here
              CSendDlg  dlg;
              CString
            if(dlg2.DoModal() == IDOK)
             {
                 str = dlg2.m_strData;
                 GetDlgItem(IDC_CEDIT_USERNAME)->SetWindowText(str);
              }
    }这样么?IDOK应该用什么代替?
      

  4.   

    不用也可以,在你的按钮触发事件函数最后调用UpdateData(FALSE)就可以了
      

  5.   

    IDC_CEDIT_MSG  绑定成一个CString m_tx;
    void CSendDlg::OnCbuttonSend() 
    {
    UpdateData();
    CDialog::OnOK();
    }
    void CSettingDlg::OnCbuttonSetting() 
    {
             CSendDlg  dlg;
             CString str;
            if(dlg2.DoModal() == IDOK)
             {
                 str = dlg2.m_tx;
              }
    }
    这样就行了`
      

  6.   

    yeah?真的好用爱,太感谢了!
      

  7.   

    dlg.DoModal();不是写在主窗口么直接用dlg对象调用子窗口成员就可以了呀
      

  8.   

    这样么?IDOK应该用什么代替?
    ========================================
    你的意思是说你不想用默认的按钮,而自己做了个按钮,这些当然可以,根本不要改上面的IDOK的,对你加的按钮处理函数最后加一句:CDialog::OnOk();即可,它返回的还是IDOK