文章转自:http://blog.csdn.net/wangshiqilin_fjy/article/details/14458843
网上关于“MFC自定义消息”相关的文章实在有点杂,至少我查这部分资料的时候很头疼。好吧,为了让看这篇文章的码农同行少走点弯路,我不介意在这里一步一步的告诉您,自定义消息应该如何实现。按照步骤走,我相信你的程序可以运行!
一、目标:在父窗口的Edit Control中写入信息,单击确定按钮后在子窗口的Edit Control中显示出来。其中发送消息是父窗口,接受消息是子窗口。
二、准备工作
建立一个基于对话框的MFC应用程序,添加一个子窗口,用来接受父窗口的信息。
父窗口与子窗口都有一个EditBox控件,为其添加一个Value类型变量:m_MessageToSend,我们要往该控件填入发送的字符串;
为子窗口的EditBox控件添加value类型的成员变量:m_RcvMsg,他接受传递过来的信息。
三、实现
1、发送消息的实现。
为父窗口所在类的.h文件中添加消息宏:
#defineWM_MY_MESSAGE (WM_USER+100)
击父窗口的“确定”按钮,改写内容如下:
- void CMFC_MessageDlg::OnBnClickedOk()
- {
- //TODO: 在此添加控件通知处理程序代码
- UpdateData(); //将控件中的值赋值到对应的变量中
- CSon*ptr = new CSon;
- ptr->Create(IDD_DIALOG_SON);
- CString*msg= new CString(m_MessageToSend);// 初始化一个指针
- ::SendMessage(
- *FindWindow(NULL,_T("SON")) //FindWInd(NULL,_T(***))通过窗口名返回窗口的句柄指针
- ,WM_MY_MESSAGE
- ,0
- ,(LPARAM)msg); //信息的地址
- ptr->ShowWindow(SW_NORMAL);
- deletemsg;
- }
2.消息接收的实现
为子窗口所在类的.h文件中添加消息宏:
#defineWM_MY_MESSAGE (WM_USER+100)
在接受消息的窗口类头文件中添加消息映射:
afx_msg LRESULT OnMyMessage(WPARAMwParam,LPARAM lParam);
在要响应的类的.cpp文件中增加消息映射部分
ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
在接受消息的窗口类的实现文件(.cpp)中添加消息处理函数
- LRESULTCSon::OnMyMessage(WPARAM wParam,LPARAM lParam)
- {
- CString*rmsg = (CString*)lParam; //传递过来的是地址。
- m_RcvMsg= *rmsg; //保存传递过来的信息到Edit Control 中
- UpdateData(FALSE); //将传递过来的信息显示在EditControl上
- return 0;
- }
完成。
我用VS2010写了这个程序,下载链接在此:点击打开链接