MFC中对话框之间消息传递
2013-09-25 23:56
344 查看
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
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
相关文章推荐
- MFC对话框之间自定义消息传递
- 如何在MFC对话框之间自定义消息传递
- 如何在MFC对话框之间自定义消息传递
- MFC不同对话框之间的数据传递
- 转《MFC对话框消息传递顺序》
- MFC 子对话框之间互相发送消息的方案
- MFC视频教学第一课,做一个简单的界面,理解应用程序和操作系统之间的消息传递机制
- MFC窗口之间的消息传递
- MFC学习之对话框---对话框之间的domodle 数据传递
- MFC在不同的类窗体之间传递消息
- MFC对话框消息传递顺序
- MFC中DoDataExchange函数以及在对话框之间传递信息
- MFC 两个对话框直接的消息传递
- mfc对话框窗口之间变量的传递
- MFC 线程的消息传递问题一---线程和窗体之间
- 基于对话框的MFC窗口之间值的传递
- MFC对话框消息传递顺序
- MFC 线程消息传递问题二---两个线程之间进行消息的传递
- MFC中两个对话框之间数据传递
- MFC中实现父对话框与子对话框之间的参数传递,实例可测