Only child windows receive WM_SHOWWINDOW in DestroyWindow() under
Windows.

diff --git a/windows/win.c b/windows/win.c
index 15e85c7..e47ea3f 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -1429,6 +1429,7 @@
     if (GetGUIThreadInfo( GetCurrentThreadId(), &info ))
     {
         if (hwnd == info.hwndCaret) DestroyCaret();
+        if (hwnd == info.hwndActive) WINPOS_ActivateOtherWindow( hwnd );
     }
     if (USER_Driver.pResetSelectionOwner)
         USER_Driver.pResetSelectionOwner( hwnd, TRUE );
@@ -1505,10 +1506,13 @@
 
       /* Hide the window */
 
-    if (!ShowWindow( hwnd, SW_HIDE ))
-    {
-        if (hwnd == GetActiveWindow()) WINPOS_ActivateOtherWindow( hwnd );
-    }
+    /* Only child windows receive WM_SHOWWINDOW in DestroyWindow() */
+    if (is_child)
+        ShowWindow( hwnd, SW_HIDE );
+    else
+        SetWindowPos( hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE |
+                      SWP_NOZORDER | SWP_NOACTIVATE | SWP_HIDEWINDOW );
+
     if (!IsWindow(hwnd)) return TRUE;
 
       /* Recursively destroy owned windows */