MFC中消息机制之实现多窗体信息的传输
2015-07-16 13:58
363 查看
MFC中消息机制之实现多窗体信息的传输
1.在建好的工程.h文件中宏定义两个消息ID
#define WM_MAIN_MSG WM_USER+0x00001
#define WM_SUB_MSG WM_USER+0x00002
注:WM_USER+0X0001是为了区分用户自定义消息和系统消息
2.分别在父窗体和子窗体中建立消息映射表
(父窗体的.cpp文件)
BEGIN_MESSAGE_MAP(CRevMsgDlg, CDialog)
//{{AFX_MSG_MAP(CRevMsgDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_MESSAGE(WM_MAIN_MSG, CRevMsgDlg::OnMainMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
(子窗体的.cpp文件)
BEGIN_MESSAGE_MAP(CMySubDialog, CDialog)
//{{AFX_MSG_MAP(CMySubDialog)
ON_MESSAGE(WM_SUB_MSG, CMySubDialog::OnSubMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3.分别在父窗体和子窗体定义并实现消息处理函数
(父窗体)
.h文件中声明
afx_msg LRESULT OnMainMsg(WPARAM wParam, LPARAM lParam);
.cpp文件中实现
//打开子窗体
void CRevMsgDlg::OnButton1()
{
// TODO: Add your control notification handler code here
dlg = new CMySubDialog();
dlg->Create(IDD_DIALOG1,this);
AfxMessageBox("1");
if (dlg != NULL)
{
dlg->ShowWindow(SW_SHOW);
}
}
//向子窗体发送消息
void CRevMsgDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CString strEdit;
GetDlgItemText(IDC_EDIT1,strEdit);
if (dlg != NULL)
{
dlg->SendMessage(WM_SUB_MSG,(WPARAM)&strEdit);
}
}
//处理子窗体发过来的信息
afx_msg LRESULT CRevMsgDlg::OnMainMsg(WPARAM wParam, LPARAM lParam)
{
CString *strMsg = (CString *)wParam;
SetDlgItemText(IDC_EDIT1, *strMsg);
return 0;
}
子窗体
.h文件
ON_MESSAGE(WM_SUB_MSG, CMySubDialog::OnSubMsg);
.cpp文件
void CMySubDialog::OnButton1()
{
// TODO: Add your control notification handler code here
CString strEdit;
GetDlgItemText(IDC_EDIT1,strEdit);
HWND hWnd = this->GetParent()->GetSafeHwnd();
if (hWnd != NULL)
{
::SendMessage(hWnd,WM_MAIN_MSG,(WPARAM)&strEdit,NULL);
}
}
afx_msg LRESULT CMySubDialog::OnSubMsg(WPARAM wParam, LPARAM lParam)
{
CString *strMsg = (CString *)wParam;
SetDlgItemText(IDC_EDIT1, *strMsg);
return 0;
}
4.运行结果
1.在建好的工程.h文件中宏定义两个消息ID
#define WM_MAIN_MSG WM_USER+0x00001
#define WM_SUB_MSG WM_USER+0x00002
注:WM_USER+0X0001是为了区分用户自定义消息和系统消息
2.分别在父窗体和子窗体中建立消息映射表
(父窗体的.cpp文件)
BEGIN_MESSAGE_MAP(CRevMsgDlg, CDialog)
//{{AFX_MSG_MAP(CRevMsgDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_MESSAGE(WM_MAIN_MSG, CRevMsgDlg::OnMainMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
(子窗体的.cpp文件)
BEGIN_MESSAGE_MAP(CMySubDialog, CDialog)
//{{AFX_MSG_MAP(CMySubDialog)
ON_MESSAGE(WM_SUB_MSG, CMySubDialog::OnSubMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3.分别在父窗体和子窗体定义并实现消息处理函数
(父窗体)
.h文件中声明
afx_msg LRESULT OnMainMsg(WPARAM wParam, LPARAM lParam);
.cpp文件中实现
//打开子窗体
void CRevMsgDlg::OnButton1()
{
// TODO: Add your control notification handler code here
dlg = new CMySubDialog();
dlg->Create(IDD_DIALOG1,this);
AfxMessageBox("1");
if (dlg != NULL)
{
dlg->ShowWindow(SW_SHOW);
}
}
//向子窗体发送消息
void CRevMsgDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CString strEdit;
GetDlgItemText(IDC_EDIT1,strEdit);
if (dlg != NULL)
{
dlg->SendMessage(WM_SUB_MSG,(WPARAM)&strEdit);
}
}
//处理子窗体发过来的信息
afx_msg LRESULT CRevMsgDlg::OnMainMsg(WPARAM wParam, LPARAM lParam)
{
CString *strMsg = (CString *)wParam;
SetDlgItemText(IDC_EDIT1, *strMsg);
return 0;
}
子窗体
.h文件
ON_MESSAGE(WM_SUB_MSG, CMySubDialog::OnSubMsg);
.cpp文件
void CMySubDialog::OnButton1()
{
// TODO: Add your control notification handler code here
CString strEdit;
GetDlgItemText(IDC_EDIT1,strEdit);
HWND hWnd = this->GetParent()->GetSafeHwnd();
if (hWnd != NULL)
{
::SendMessage(hWnd,WM_MAIN_MSG,(WPARAM)&strEdit,NULL);
}
}
afx_msg LRESULT CMySubDialog::OnSubMsg(WPARAM wParam, LPARAM lParam)
{
CString *strMsg = (CString *)wParam;
SetDlgItemText(IDC_EDIT1, *strMsg);
return 0;
}
4.运行结果
相关文章推荐
- 15款创建漂亮幻灯片的 jQuery 插件
- [C#HttpHelper]类1.4正式版教程与升级报告
- C# winform 打印事例
- Android Activity 常用功能设置(全屏、横竖屏等)
- EasyUI datagird 排序 按数字类型的问题
- 使用低版本Jackson 2的类级@JsonInclude包含策略的bug
- 在Windows上使用mongodb
- List实现
- shell-自动部署war包到tomcat
- Linux LVM学习总结——扩展卷组VG
- 动态主机配置协议(DHCP)如何启动和关闭
- Linux下Web服务器环境搭建LNMP一键安装包 v2.6
- 值类型数据和引用类型数据
- CATALOG DATABASE command
- C++虚基类
- 阿里音乐:前脚送走刘春宁,后脚迎来高晓松(咱不谈颜值,只聊音
- 普通视图和物化视图的区别
- Unity3D研究院之通过C#使用Advanced CSharp Messenger(五十)
- Linux下Web服务器环境搭建LNMP一键安装包 v2.6
- 股市成本