先在窗口注册目标窗口的回调函数ParentProc:
// Set parent window original processing.
m_OriParentProc = ::GetWindowLong(m_hParentWnd, GWL_WNDPROC);
::SetWindowLong(m_hParentWnd, GWL_WNDPROC, (LONG)ParentProc);
然后定义回调函数ParentProc,就可以接受目标窗口的所有窗口消息了:
static LRESULT CALLBACK ParentProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// Find the shadow window pointer via parent window handle.
ATLASSERT( m_szShadowWindows.find(hwnd) != m_szShadowWindows.end() );
CThemedShadowWnd *pThis = m_szShadowWindows[hwnd];
WNDPROC pDefProc = (WNDPROC)pThis->m_OriParentProc;
switch(uMsg)
{
case WM_DESTROY:
{
// Destroy the shadow window.
pThis->DestroyWindow();
break;
}
default:
{
if (::IsWindowVisible(hwnd))
{
pThis->AdjustWindowPos();
}
break;
}
}
return pDefProc(hwnd, uMsg, wParam, lParam);
}