子窗口向父窗口发送消息
方法一:
1.首先要正确设置子窗口的父窗口
2.子窗口发送消息
::PostMessageW(GetParent()->m_hWnd,WM_FIND_STRING_NEXT,WM_FIND_STRING_NEXT_ANSI,(LPARAM)0);
GetParent()->PostMessage(WM_FIND_STRING_NEXT,WM_FIND_STRING_NEXT_UNICODE,(LPARAM)1);
其中WM_FIND_STRING_NEXT为自定义的消息类型,此类型需要和父窗口的消息处理函数关联。
WM_FIND_STRING_NEXT_ANSI,WM_FIND_STRING_NEXT_UNICODE是不同的消息。
自己定义的消息ID
#define WM_FIND_STRING_NEXT (WM_USER + 100)
#define WM_FIND_STRING_NEXT_ANSI (WM_USER + 101)
#define WM_FIND_STRING_NEXT_UNICODE (WM_USER + 102)
3.父窗口中,把消息与消息处理函数关联
BEGIN_MESSAGE_MAP(CDiskDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_FIND_STRING_NEXT,&CDiskDlg::OnMessageFindString)//把消息与消息处理函数关联,注意添加位置
END_MESSAGE_MAP()
4.在头文件.h中添加函数声明
LRESULT OnMessageFindString(WPARAM wParam, LPARAM lParam);
5.在.cpp中添加消息处理函数的实现
LRESULT CDiskDlg::OnMessageFindString(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(wParam)
{
case WM_FIND_STRING_NEXT_ANSI:
处理消息1的代码
break;
case WM_FIND_STRING_NEXT_UNICODE:
处理消息2的代码
break;
default:
;
}
return TRUE;
}
方法二:
1.在父窗口中添加消息处理函数。选中窗口,右击,选Class Wizard,如图
选virtual function,找到windowproc,点击右侧按钮add function.会看到overridden virtual functions:下添加成功。若想删除,点击overridden virtual functions:下的windowproc,点击右侧按钮delete function即可删除。
2.在消息处理函数windowproc中处理消息
LRESULT CDiskDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if (message == 你自己的消息ID)
{
处理消息
}
return CDialogEx::WindowProc(message, wParam, lParam);
}