Initialize MinMax.ptReserved, use better defaults for child windows.

diff --git a/windows/winpos.c b/windows/winpos.c
index 63121b4..60c3a36 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -740,11 +740,25 @@
     INT xinc, yinc;
     LONG style = GetWindowLongA( hwnd, GWL_STYLE );
     LONG exstyle = GetWindowLongA( hwnd, GWL_EXSTYLE );
+    RECT rc;
 
     /* Compute default values */
 
-    MinMax.ptMaxSize.x = GetSystemMetrics(SM_CXSCREEN);
-    MinMax.ptMaxSize.y = GetSystemMetrics(SM_CYSCREEN);
+    GetWindowRect(hwnd, &rc);
+    MinMax.ptReserved.x = rc.left;
+    MinMax.ptReserved.y = rc.top;
+
+    if (style & WS_CHILD)
+    {
+        GetClientRect(GetParent(hwnd), &rc);
+        MinMax.ptMaxSize.x = rc.right;
+        MinMax.ptMaxSize.y = rc.bottom;
+    }
+    else
+    {
+        MinMax.ptMaxSize.x = GetSystemMetrics(SM_CXSCREEN);
+        MinMax.ptMaxSize.y = GetSystemMetrics(SM_CYSCREEN);
+    }
     MinMax.ptMinTrackSize.x = GetSystemMetrics(SM_CXMINTRACK);
     MinMax.ptMinTrackSize.y = GetSystemMetrics(SM_CYMINTRACK);
     MinMax.ptMaxTrackSize.x = GetSystemMetrics(SM_CXSCREEN);
@@ -1191,6 +1205,8 @@
     HDWP handle;
     DWP *pDWP;
 
+    TRACE("%d\n", count);
+
     if (count < 0)
     {
         SetLastError(ERROR_INVALID_PARAMETER);
@@ -1207,6 +1223,8 @@
     pDWP->valid          = TRUE;
     pDWP->wMagic         = DWP_MAGIC;
     pDWP->hwndParent     = 0;
+
+    TRACE("returning hdwp %p\n", handle);
     return handle;
 }
 
@@ -1222,6 +1240,9 @@
     int i;
     HDWP newhdwp = hdwp,retvalue;
 
+    TRACE("hdwp %p, hwnd %p, after %p, %d,%d (%dx%d), flags %08x\n",
+          hdwp, hwnd, hwndAfter, x, y, cx, cy, flags);
+
     hwnd = WIN_GetFullHandle( hwnd );
     if (hwnd == GetDesktopWindow()) return 0;
 
@@ -1295,6 +1316,8 @@
     BOOL res = TRUE;
     int i;
 
+    TRACE("%p\n", hdwp);
+
     pDWP = (DWP *) USER_HEAP_LIN_ADDR( hdwp );
     if (!pDWP) return FALSE;
     for (i = 0, winpos = pDWP->winPos; i < pDWP->actualCount; i++, winpos++)