user32: Check for wraparound in the initial window coordinates.

This commit is contained in:
Alexandre Julliard 2008-05-28 21:32:50 +02:00
parent ca34eb1612
commit a6df5e7e1d
2 changed files with 28 additions and 0 deletions

View file

@ -4230,6 +4230,31 @@ static void test_CreateWindow(void)
ok( rc.bottom == 0, "invalid rect bottom %u\n", rc.bottom );
DestroyWindow(hwnd);
/* we need a parent at 0,0 so that child coordinates match */
DestroyWindow(parent);
parent = CreateWindowEx(0, "MinMax_WndClass", NULL, WS_POPUP, 0, 0, 100, 100, 0, 0, 0, NULL);
ok(parent != 0, "CreateWindowEx error %d\n", GetLastError());
expected_cx = 100;
expected_cy = 0x7fffffff;
SetRect( &expected_rect, 10, 10, 110, 0x7fffffff );
hwnd = CreateWindowExA(0, "Sizes_WndClass", NULL, WS_CHILD, 10, 10, 100, 0x7fffffff, parent, 0, 0, NULL);
ok( hwnd != 0, "creation failed err %u\n", GetLastError());
GetClientRect( hwnd, &rc );
ok( rc.right == 100, "invalid rect right %u\n", rc.right );
ok( rc.bottom == 0x7fffffff - 10, "invalid rect bottom %u\n", rc.bottom );
DestroyWindow(hwnd);
expected_cx = 0x7fffffff;
expected_cy = 0x7fffffff;
SetRect( &expected_rect, 20, 10, 0x7fffffff, 0x7fffffff );
hwnd = CreateWindowExA(0, "Sizes_WndClass", NULL, WS_CHILD, 20, 10, 0x7fffffff, 0x7fffffff, parent, 0, 0, NULL);
ok( hwnd != 0, "creation failed err %u\n", GetLastError());
GetClientRect( hwnd, &rc );
ok( rc.right == 0x7fffffff - 20, "invalid rect right %u\n", rc.right );
ok( rc.bottom == 0x7fffffff - 10, "invalid rect bottom %u\n", rc.bottom );
DestroyWindow(hwnd);
/* top level window */
expected_cx = expected_cy = 200000;
SetRect( &expected_rect, 0, 0, GetSystemMetrics(SM_CXMAXTRACK), GetSystemMetrics(SM_CYMAXTRACK) );

View file

@ -1119,6 +1119,9 @@ static HWND WIN_CreateWindowEx( CREATESTRUCTA *cs, LPCWSTR className, UINT flags
if (cx < 0) cx = 0;
if (cy < 0) cy = 0;
SetRect( &rect, cs->x, cs->y, cs->x + cx, cs->y + cy );
/* check for wraparound */
if (cs->x + cx < cs->x) rect.right = 0x7fffffff;
if (cs->y + cy < cs->y) rect.bottom = 0x7fffffff;
if (!set_window_pos( hwnd, 0, SWP_NOZORDER | SWP_NOACTIVATE, &rect, &rect, NULL )) goto failed;
/* send WM_NCCREATE */