From 5714c4deee6f3c0cc30098d056fa4ce39a333878 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 8 May 2008 11:12:03 +0200 Subject: [PATCH] user32: The client rectangle is in screen coordinates for the initial WM_NCCALCSIZE. --- dlls/user32/tests/win.c | 9 +++++++++ dlls/user32/win.c | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c index 26ceb550fb3..21119d5dac1 100644 --- a/dlls/user32/tests/win.c +++ b/dlls/user32/tests/win.c @@ -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); } diff --git a/dlls/user32/win.c b/dlls/user32/win.c index a1f3024eef6..8214fd50e36 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -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;