最近在MFC主对话框添加了tab控件,每个tab页用了一个子对话框,然后就涉及到了一个问题,当主对话框有数据需要显示在子对话框列表控件时,怎么实现?后来听技术大牛点拨,主对话框中PostMessage的参数和子对话框自定义消息响应函数绑定,然后PostMessage把消息抛出,当执行到主对话框的PostMessage时,就会触发子对话框的消息响应函数。废话少说,开始讲代码:以下代码都已经过测试,可直接使用~
1、首先在StdAfx.h中添加:#define WM_TEST WM_USER+101 //用户消息 用来绑定PostMessage和自定义的消息响应函数
2、在子对话框中添加消息响应函数,这个网上资料很多,这里简单说一下:
在头文件中添加:afx_msg LRESULT OnTest(WPARAM wParam,LPARAM lParam);
在cpp文件中添加:ON_MESSAGE(WM_TEST,OnTest)
添加具体函数:
LRESULT CPara2::OnTest(WPARAM wParam,LPARAM lParam)
{
MessageBox("Hello World");
}
3、在主对话框你需要响应的地方添加:
::PostMessage(para2.GetSafeHwnd(),WM_TEST,0,0);//para2是子对话框的类名,由于是不同窗口之间,所以获得句柄用GetSafeHwnd()函数
4、我的数据传递用的全局变量,如果想通过PostMessage传递,可以使用第3、4项。
至此,不同窗口之间数据传递、触发就完成了,如有更好的见解,欢迎分享补充~