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;
}