非模式对话框与主对话框数据传输解决方案

非模式对话框与主对话框数据传输
我创建了一个非模态对话框(类名为calTNT),里面有一个输入框A(变量为TNT1)。
主窗口(类名为“C测试Dlg”)有一个输入框B(变量为TNT2)。
在按下非模式对话框按钮1后我想将,TNT1的值赋给TNT2,,同时关闭非模式对话框。代码如下:
void calTNT::OnBnClickedOk2()
{
    UpdateData(true);
C测试Dlg dlg;
dlg.TNT2=TNT1;
CDialogEx::OnOK();
}
为什么不能赋值?
是因为窗口关闭了吗?
------解决思路----------------------
这样肯定不行,C测试Dlg dlg;代表的是另一个主窗口变量,和你已经建立的那个主窗口没有关系。
------解决思路----------------------
方法很多,比如你可以改一下非模态对话框的构造函数,将主窗口的指针传进来,然后在非模态对话框中通过主窗口的指针来操作主窗口。或者向主窗口发自定义消息,将数据通过自定义消息的参数传过去。
------解决思路----------------------
TNT1是你创建的非模态对话框的变量,这个变量你赋值给了谁?dlg.TNT2?
dlg是什么?dlg是主对话框?明显不是,C测试Dlg dlg; dlg是你这个函数里的一个局部变量。。
你要赋值给主对话框的成员变量,要把主对话框的指针传进来进行赋值。 
------解决思路----------------------
最简单的就是靠消息传值。因为非模态对话框和主界面共享消息泵。
------解决思路----------------------
原因很简单:
void calTNT::OnBnClickedOk2()
{
    UpdateData(true);
C测试Dlg dlg;
dlg.TNT2=TNT1;
CDialogEx::OnOK();
}
中的"C测试Dlg dlg"是位于函数OnBnClickedOk2()内部的局部变量,他并不是你看到的那个主窗口。
试试:
void calTNT::OnBnClickedOk2()
{
   CWnd* pwnd = GetParent();//得到主窗口的指针
CString input;//存贮输入数值
GetDlgItemText(IDC_EDIT1,input);
pwnd->SetDlgItemText(IDC_EDIT1,input);//写到主窗口中
        CDialog::OnOK();
}
------解决思路----------------------
CEdit又没有定义赋值运算符(=)你编译能通过?
------解决思路----------------------
通过
theApp
也是一个好方法