MFC对话框之间传递数据

由于对MFC还不算很熟悉,这个只是写下一些基本的方法,MFC中对话框之间传递数据我分为了两种:

1.主对话框往子对话框传递数据

2.子对话框往主对话框传递数据

下面分别简述下着两种情况,对于第一种来说,子对话框肯定是在主对话框的函数中创建并显示的,同时,数据传递的前提必须是子对话框已经建立才行,否则没有对象去接收数据了,必然会报错,子对话框又分为两种:非模式对话框和模式对话框,

对于非模式对话框来说数据传递必须在Create之后,举个例子来说,对话框A是主对话框,对话框B是子对话框并且是非模式对话框,同时为两个对话框关联一个CString类型变量,界面如下所示:


左侧为主对话框,右侧是子对话框,为“确定”按键关联响应函数,如下

void CParamsTestDlg::OnButton() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	B *dlg = new B;
	dlg->Create(IDD_DIALOG_B,this);
	dlg->m_EditData = m_EditValue;
	dlg->UpdateData(FALSE);
	dlg->ShowWindow(SW_SHOW);
}

运行即可,效果如下


对于模式对话框来说,只是修改了按键的响应函数而已,如下

void CParamsTestDlg::OnButton() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	B dlg;
	
	dlg.m_EditData = m_EditValue;
	
	dlg.DoModal();
}

二、下面简述下子对话框向主对话框传递数据

将上面的对话框改成在B中数据数据,在A中显示,A中的按键响应函数只需将B弹出显示即可,为B中的“OK”按键添加响应函数

void B::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData(TRUE);
	GetParent()->SetDlgItemText(IDC_EDIT, m_EditData);
}
得到变量的话用下面的方法

void B::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData(TRUE);
	((CParamsTestDlg*)GetParent())->m_EditValue = m_EditData;
	((CParamsTestDlg*)GetParent())->UpdateData(FALSE);
}
网上还有一种是在创建B对象的同时将A的指针放在B的构造函数中,这样B就可以得到A的指针,操作也就方便了;同时,用静态方法也可以将子对话框的数据传递给主对话框,这里就不细说了。


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页