The notification message is sent to parent anyway, you cannot change this. What you normally do is message reflection from parent to the child, so that [improved] child could take care of notification generated by its ancestor.
The parent window will have a reflecting handler on the message map:
#include <atlcrack.h>
BEGIN_MSG_MAP_EX(CMyDialog)
// ...
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
And the control will have a handler for WM_NOTIFY notifications reflected by control parent:
BEGIN_MSG_MAP_EX(CPopupList)
// ...
//MSG_OCM_CTLCOLORSTATIC(OnReflectedCtlColorStatic) // Reflected WM_CTLCOLORSTATIC
MSG_OCM_NOTIFY(OnReflectedNotify) // Reflected WM_NOTIFY
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
OnReflectedNotify
is where you can handle the control's notifications, but the parent is responsible for forwarding them (with or without its own processing).
See also a word on this on CodeProject in WTL macros for handling reflected messages.