在MFC中实现子窗体向父窗体传递参数的几种方法简述典型问题举例窗体和子窗体均有一个Edit控件和一个按钮,点击父窗体按钮显示子窗体;点击子窗体按钮后,子窗体中Edit控件的值显示在在父窗体中的Edit控件中。在MFC中实现子窗体向父窗体传递参数的几种方法简述1、在父窗体定义静态变量2、传窗体的指针给子窗体3、子窗体调用GetParent4、向父窗体sendMessage方法1,使用静态变量,如果有多个子对象和父对象存在时,处理比较麻烦。方法2,传指针给子窗体,子窗体需要另外保存这个指针,此方法可由方法3替代。方法3,比方法2优,但与方法2都与父窗体耦合较深。方法4,推荐采用方法;采用这种方法,子窗体可以放到任何父窗体上,只要父窗体响应此消息即可。示例源码通过子窗体调用GetParent向父窗体传递参数的示例GetParent()->SetDlgItemText(IDC_EDIT1,TCHAR*)通过向父窗体发送消息(sendMessage)来传递参数示例SendMessage的基本结构如下SendMessage(HWNDhWnd,//消息传递的目标窗口或线程的句柄。UINTMsg,//消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)WPARAMwParam,//参数1(WPARAM其实是与UINT是同种类型的,//在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。LPARAMlParam);//参数2其中一些参数的说明如下://typedefunsignedintUINT;//typedefUINTWPARAM;//typedefLONGLPARAM;//typedefLONGLRESULT;可以用以下语句发送消息:::SendMessage(this->m_hWnd,WM_MY_DOSOME,(WPARAM)0,(LPARAM)0);这里我发送的消息是本窗体接收的,所以句柄用:this->m_hWnd。这里的消息类别WM_MY_DOSOME是用户自定义的,在接收消息的窗体或线程所在的头文件里:#defineWM_MY_DOSOMEWM_USER+1//dosomething当然你还可以定义更多如:#defineWM_DOOTHERWM_USER+2//doother表示要做一些事情。我们发了一个消息出去,那么接收方要能识别这个消息是干什么,就是通过消息类别来区分,并且根据消息类别去调用消息处理函数。接收方需要做以下几步:1、在接收方编写一个消息处理函数我们在接收窗体里定义一个消息处理函数,以处理接收到该消息后应该做什么事情。afx_msgLRESULTDoSomeThing(WPARAMiParam1,LPARAMiParam2){MessageBox("收到消息了,我要开始做一些事情了。","收到",MB_OK);//可以运用iParam1,iParam2来做一些事情。return0;}编写消息处理函数有3点需要格外注意:1)使用了afx_msg,并且要将afx_msgLRESULTDoSomeThing(WPARAMiParam1,LPARAMiParam2)改写到头文件的{{AFX_MSG...AFX_MSG}}包含的灰色部分,如下://{{AFX_MSG//。。。改写到这里,颜色会变成灰的。这一点非常重要。
MFC子窗体向父窗体传递参数的几种方法 来自淘豆网m.daumloan.com转载请标明出处.