下のやり方だと子のMessageBox()が表示されないんですが、また解釈が間違ってますか?

WNDPROC fnDefProc;// グローバル

LRESULT CALLBACK ParentProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
  static HWND hButton;
  switch(msg) {
  case WM_CREATE:
    hButton = CreateWindow("BUTTON", "PUSH", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
        0, 0, 100, 100, hwnd, (HMENU)1, ((LPCREATESTRUCT)lp)->hInstance, NULL);
    fnDefProc = (WNDPROC)GetWindowLong(hButton, GWL_WNDPROC);
    SetWindowLong(hButton, GWL_WNDPROC, (LONG)ButtonProc);
    break;
  case WM_DESTROY:
    //  SendMessage(hButton, WM_DESTROY, wp, lp);
    MessageBox(hwnd, "Parent", "end", MB_OK);
    PostQuitMessage(0);
    break;
  default: return DefWindowProc(hwnd, msg, wp, lp);
  }
  return 0;
}

LRESULT CALLBACK ButtonProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
  if(msg==WM_DESTROY) MessageBox(NULL, "Child", "end", MB_OK);
  return CallWindowProc(fnDefProc, hwnd, msg, wp, lp);
}