user32: The client rectangle is in screen coordinates for the initial WM_NCCALCSIZE.

This commit is contained in:
Alexandre Julliard 2008-05-08 11:12:03 +02:00
parent 09cb415109
commit 5714c4deee
2 changed files with 16 additions and 0 deletions

View File

@ -3929,6 +3929,15 @@ static LRESULT CALLBACK winsizes_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM
expected_rect.left, expected_rect.top, expected_rect.right, expected_rect.bottom );
return DefWindowProc(hwnd, msg, wp, lp);
}
case WM_NCCALCSIZE:
{
RECT rect, *r = (RECT *)lp;
GetWindowRect( hwnd, &rect );
ok( !memcmp( &rect, r, sizeof(rect) ),
"passed rect %d,%d-%d,%d doesn't match window rect %d,%d-%d,%d\n",
r->left, r->top, r->right, r->bottom, rect.left, rect.top, rect.right, rect.bottom );
return DefWindowProc(hwnd, msg, wp, lp);
}
default:
return DefWindowProc(hwnd, msg, wp, lp);
}

View File

@ -1139,11 +1139,18 @@ static HWND WIN_CreateWindowEx( CREATESTRUCTA *cs, LPCWSTR className, UINT flags
if ((wndPtr = WIN_GetPtr(hwnd)))
{
/* yes, even if the CBT hook was called with HWND_TOP */
POINT pt;
HWND insert_after = (wndPtr->dwStyle & WS_CHILD) ? HWND_BOTTOM : HWND_TOP;
RECT window_rect = wndPtr->rectWindow;
RECT client_rect = window_rect;
WIN_ReleasePtr( wndPtr );
/* the rectangle is in screen coords for WM_NCCALCSIZE when wparam is FALSE */
pt.x = pt.y = 0;
MapWindowPoints( parent, 0, &pt, 1 );
OffsetRect( &client_rect, pt.x, pt.y );
SendMessageW( hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&client_rect );
OffsetRect( &client_rect, -pt.x, -pt.y );
set_window_pos( hwnd, insert_after, SWP_NOACTIVATE, &window_rect, &client_rect, NULL );
}
else return 0;