您的位置:首页 > 其它

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.运行结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: