MFC_消息传递方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

背景:新建了一个基于对话框的MFC程序,在主对话框中添加tabcontrol控件,又新建了两个Dialog(CDialog1和CDialog2),将它们设为tabcontrol控件的子对话框。

目的:两个子对话框之间传递消息,子对话框与主对话框传递消息。

方法:第一步: 定义消息.

在目标窗口类的头文件或者stdafx.h中添加:#define

WM_MY_MESSAGE (WM_USER+100); 推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。

第二步: 在目标类头文件的AFX_MSG块中说明消息处理函数: afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

view plaincopy to clipboardprint?

1.class CDialog1:public CDialog

2.{

3....

4.// 一般消息映射函数

5.protected:

6.// {{AFX_MSG(CDialog)

7. virtual BOOL OnInitDialog();

8. afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

9. afx_msg void OnPaint();

10. afx_msg HCURSOR OnQueryDragIcon();

11.afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

12.//}}AFX_MSG

13.DECLARE_MESSAGE_MAP()

14.}

第三步:在目标类源文件cpp中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。view plaincopy to clipboardprint?

1.BEGIN_MESSAGE_MAP(CDialog1, CDialog)

2. ON_WM_SYSCOMMAND()

3. ON_WM_PAINT()

4. ON_WM_QUERYDRAGICON()

5.ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

6.//}}AFX_MSG_MAP

7.END_MESSAGE_MAP()

1.LPESULT CDialog1::OnMyMessage(WPARAM wParam, LPARAM lParam)

2.{

3.// TODO: 处理用户自定义消息

4.//MessageBox("消息传递完成!");

5.return 0;

6.}

第五步:发送消息时,在源地址类CDialog2的CPP文件中(如一个Button),调用函数PostMessage或SendMessa

ge发送消息。PoseMessage(WM_MY_MESSAGE,O,O); SendMessage(WM_MY_MESSAGE,O,O);

此时需要注意::::

假如主对话框的类名:CSecondShimDlg,两个子对话框的类名CDialog1和CDialog2;

. 要实现两个子对话框之间进行通信(CDialog2向CDialog1发送消息,目标类即为CDialog1),则在CDialog2源文件中的发送函数应该这么写:

view plaincopy to clipboardprint?

1.CSecondShimDlg * m_Host = (CSecondShimDlg*)AfxGetMainWnd();

2.m_Host->m_Diag1.SendMessage(WM_MY_MESSAGE , wparam, lparam);//这里要注意是m_Diag1,它

是在主对话框类中定义的一个CDialog1对象,即目标对象。

1.CSecondShimDlg * m_Host = (CSecondShimDlg*)AfxGetMainWnd();

2.m_Host->SendMessage(WM_MY_MESSAGE , wparam, lparam);

view plaincopy to clipboardprint?

1.::SendMessage(this->GetParent()->GetParent()->m_hWnd, WM_MY_MESSAGE ,wparam, lparam)

;

2. // SendMessage函数的第一个参数是目标窗口的句柄。之所以要用两个GetParent()因为Dialog2

的父对话框为TabControl,TabControl的父对话框为主对话框CSecondShimDlg

相关文档
最新文档