OnNotify是用于子控件向父窗口发送消息用的。该消息的接收对象是父窗口。
OnChildNotify是子控件向父窗口发送消息后,父窗口反射消息给子窗口用的。该消息的接收对象是子窗口。
如:CDialog上有一个CStatic。在CStatic上点击鼠标,则CStatic会发送OnNotify消息给CDialog。CDialog接收OnNotify消息并处理。然后CDialog会发送OnChildNotify消息给CStatic,CStatic接收OnChildNotify消息并处理。
CStatic以及所有控件都有一个virtualvoid DrawItem消息,该消息用于控件的自绘。但是父类CWnd并没有此消息。CStatic对该消息的实现就是使利用了父窗口发送来OnChildNotify消息,源代码如下:
void CStatic::DrawItem(LPDRAWITEMSTRUCT)
{
ASSERT(FALSE);
}
BOOL CStatic::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam,
LRESULT* pResult)
{
if (message != WM_DRAWITEM)
return CWnd::OnChildNotify(message, wParam, lParam, pResult);
ASSERT(pResult == NULL); // no return value expected
UNUSED(pResult); // unused in release builds
DrawItem((LPDRAWITEMSTRUCT)lParam);
return TRUE;
}
本文详细介绍了OnNotify和OnChildNotify这两种消息传递机制。OnNotify用于子控件向父窗口发送消息,而OnChildNotify则是在父窗口处理完子控件的消息后,将消息反射回子控件。此外,还解释了CStatic控件如何通过OnChildNotify实现自绘功能。
1611

被折叠的 条评论
为什么被折叠?



