MFC 父子窗口互传参数

当我们项目里有许许多多的子窗口时,我们需要将进入子窗口的摁键给整理和隐藏,这里我推荐使用下拉式菜单栏。具体如何使用看下面链接:https://blog.csdn.net/u014411348/article/details/53911682

现在开始:

一、父窗口传参给子窗口:

1.新建一个工程CMeasuringDepthDlg作为父窗口,子窗口的摁键响应函数为(这里我以位移台为例):

void CMeasuringDepthDlg::OnControl()
{
	CarrierControlDlg Dlg;
	Dlg.m_Parent = this;  //将父窗口的数据传到子窗口去
	Dlg.DoModal();
}

这样我点击进入子窗口的按钮就进入了该函数里。这里的CarrierControlDlg就是子窗口的工程名。这里我只需要将子窗口的 .h 文件加入到父窗口里面。
如:在父窗口的MeasuringDepthDlg.hMeasuringDepthDlg.cpp中加入 #include “CarrierControlDlg.h”
另外 m_Parent 需要在子窗口CarrierControlDlg.h中也加上父窗口的头文件MeasuringDepthDlg.h,并定义一个指针变量:

public:
CMeasuringDepthDlg* m_Parent;

完成之后就大功告成,子窗口想要利用父窗口的任何参数和函数只需要利用 _m_Parent_这个指针,比如:

int nRet = m_Parent-> 参数or函数 ;

另外注意:父窗口的指针不能被传参,这时我们要另想办法,可以在子窗口也创建相同类型的指针变量,在父窗口进入子窗口的函数里加入:

Dlg.m_CardControl = &m_CardControl; //将父窗口的数据传到子窗口去

二、子窗口传参给父窗口:

想必大家已经知道如何向子窗口传递参数了,但我们有时候也需要子窗口将参数传给父窗口该怎么办呢?

很简单。。

通常我会在子窗口中重绘 OnClose() 函数。

注意将函数名加入到子窗口的这里:

BEGIN_MESSAGE_MAP(CarrierControlDlg, CDialogEx)
	ON_WM_CLOSE()
	。。。
END_MESSAGE_MAP()

另外在 OnClose() 函数中加入:

void CarrierControlDlg::OnClose()
{
	// TODO: Add your message handler code here and/or call default
	if (MessageBox("确定要退出吗?", "提示", MB_YESNO | MB_DEFBUTTON2) == IDYES)
	{
		UpdateData(TRUE);
		
		CMeasuringDepthDlg * parent = (CMeasuringDepthDlg*)GetParent();
		//CMeasuringDepthDlg * parent = (CMeasuringDepthDlg*)this->GetParent();

		parent->m_nSaveImageType = m_nSaveImageType; //数据传给父窗口
		parent->nImageNum = Image_Num;    //数据传给父窗口
		parent->FileName = m_CSfilename;  //数据传给父窗口
		parent->PathName = PathName;      //数据传给父窗口

		CWnd::OnDestroy();
	}

}

最重要的就是这一句: CMeasuringDepthDlg * parent = (CMeasuringDepthDlg*)GetParent();* parent 来获取父窗口的参数。

另外附加一下思考,想起来就记下了,好记性不如烂笔头。

1.Edit如何显示字符?

m_result.SetWindowText(_T(“火星人”));

2.如何将一个int整数显示在Edit上?

int a =20;

CString str;

str.Format(_T("%d"),a);

m_result.SetWindowText(str);

你可能感兴趣的:(MFC 父子窗口互传参数)