模态(非模态)向主窗口传递数据

回答这个问题的关键是:模态(非模态)对话框如何获得父类的指针问题。

比如 CDlgA是父类窗口,则在弹出的子类窗中可以这样写:

在创建模态对话框时,对话框对象的定义一定要是类变量或全局变量,否则下面代码不成功

#include "DlgA.h"

...

CDlgA *p=(CDlgA *)GetParent();

p->m_edit.SetWindowText(_T("hello"));

就可以了。

也可以用:

void CMydialog::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知处理程序代码
 UpdateData(TRUE); 
 CMy1Dlg *p=(CMy1Dlg *)GetParent();
 p->x.SetWindowText(m_edit2);
 m_edit2="";
 UpdateData(FALSE);
}

这样的代码。

void CMydialog::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知处理程序代码
 UpdateData(TRUE); 
 CMy1Dlg *p=(CMy1Dlg *)GetParent();
 p->m_edit1=m_edit2;
 p->UpdateData(FALSE);
 m_edit2="";
 UpdateData(FALSE);
}
下面代码是写到主窗口的listbox之中

void CMydialog::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知处理程序代码
 UpdateData(TRUE); 
 CMy1Dlg *p=(CMy1Dlg *)GetParent();
 p->m_listbox.AddString(m_edit2);


}

对于非模态对话框,只需要将调用改为:

void CMy1Dlg::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知处理程序代码
 CMydialog *dlg=new CMydialog;
 dlg->Create(IDD_DIALOG1,this);
 dlg->ShowWindow(SW_SHOW);
}

以上代码适合模态(非模态)对话框。在VS2008上通过

你可能感兴趣的:(模态(非模态)向主窗口传递数据)