MFC中对话框之间消息传递

来源:互联网 发布:开淘宝店培训 编辑:程序博客网 时间:2024/06/05 07:18
1.新建MFC对话框工程Message。
2.添加对话框资源IDD_DIALOG。
3.通过类向导为对话框IDD_DIALOG添加新类CMyDialog。
4.在对话框IDD_MESSAGE_DIALOG上增加编辑框IDC_EDIT1,并添加CEdit类型变量m_Edit。
5.在对话框IDD_MESSAGE_DIALOG上增加按钮IDC_BTN_M,并添加单击事件OnBtnM()。
6.在OnBtnM()事件中显示对话框IDD_DIALOG(CMyDialog m_dlg; m_dlg.DoModal();)。


7.在stdafx.h中添加  #define WM_MYMESSAGE WM_USER+100
8.在CMessageDlg.h的protected中声明 afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam);
9.在CMessageDlg.cpp的BEGIN_MESSAGE_MAP(CMessageDlg, CDialog)中添加:ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
10.在CMessageDlg.cpp中添加函数
void CMessageDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
m_Edit.SetWindowText(_T("123"));
}


11.为对话框的按钮IDOK添加单击事件OnOK()
12.在MyDialog.cpp中添加#include "MessageDlg.h"
13.在OnOK()事件中添加代码
HWND hWnd=::FindWindow(NULL,_T("Message"));//寻找子窗口用FindWindowEx

::SendMessage(hWnd,WM_MYMESSAGE,0,0);

 

 

注意在VS2008以上版本中会有错误:

error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”

因为OnMessage返回值必须为LRESULT 所以需要做如下修改:

1、afx_msg LRESULT OnMessage(WPARAM, LPARAM);

2、把原来的消息函数返回值类型改为LRESULT,函数内加上 return 0

3、然后消息函数的参数必须改写成(WPARAM wParam,LPARAM lParam)而不论这两个参数是否用得到


http://bbs.bccn.net/thread-348167-1-1.html

原创粉丝点击