From f7402accc40b66140be4d27c5ad1b2fee8532dfc Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 18 Apr 2017 18:43:29 +0200 Subject: [PATCH] user32/tests: Add layered window child painting test when WS_CLIPCHILDREN flag is specified. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- dlls/user32/tests/win.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c index fef9cb0029b..e146e96d697 100644 --- a/dlls/user32/tests/win.c +++ b/dlls/user32/tests/win.c @@ -7317,7 +7317,7 @@ static void test_hwnd_message(void) static void test_layered_window(void) { - HWND hwnd; + HWND hwnd, child; COLORREF key = 0; BYTE alpha = 0; DWORD flags = 0; @@ -7326,6 +7326,7 @@ static void test_layered_window(void) HDC hdc; HBITMAP hbm; BOOL ret; + MSG msg; if (!pGetLayeredWindowAttributes || !pSetLayeredWindowAttributes || !pUpdateLayeredWindow) { @@ -7465,6 +7466,40 @@ static void test_layered_window(void) ok( alpha == 0 || alpha == 55, "wrong alpha %u\n", alpha ); ok( flags == 0, "wrong flags %x\n", flags ); + /* test layered window with WS_CLIPCHILDREN flag */ + SetWindowLongA( hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) | WS_CLIPCHILDREN ); + SetWindowLongA( hwnd, GWL_EXSTYLE, GetWindowLongA(hwnd, GWL_EXSTYLE) & ~WS_EX_LAYERED ); + SetWindowLongA( hwnd, GWL_EXSTYLE, GetWindowLongA(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED ); + child = CreateWindowExA( 0, "button", "button", WS_VISIBLE | WS_CHILD, + 0, 0, 50, 50, hwnd, 0, 0, NULL ); + ok( child != NULL, "CreateWindowEx error %u\n", GetLastError() ); + ShowWindow( hwnd, SW_SHOW ); + + ret = pSetLayeredWindowAttributes( hwnd, 0, 255, LWA_ALPHA ); + ok( ret, "SetLayeredWindowAttributes should succeed on layered window\n" ); + while (GetMessageA(&msg, 0, 0, 0)) + { + DispatchMessageA(&msg); + + if (msg.message == WM_PAINT && msg.hwnd == child) + break; + } + + SetWindowLongA( hwnd, GWL_EXSTYLE, GetWindowLongA(hwnd, GWL_EXSTYLE) & ~WS_EX_LAYERED ); + SetWindowLongA( hwnd, GWL_EXSTYLE, GetWindowLongA(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED ); + ret = pUpdateLayeredWindow( hwnd, 0, NULL, &sz, hdc, &pt, 0, NULL, ULW_OPAQUE ); + ok( ret, "UpdateLayeredWindow should succeed on layered window\n" ); + + ret = pSetLayeredWindowAttributes( hwnd, 0, 255, LWA_ALPHA ); + ok( ret, "SetLayeredWindowAttributes should succeed on layered window\n" ); + while (GetMessageA(&msg, 0, 0, 0)) + { + DispatchMessageA(&msg); + + if (msg.message == WM_PAINT && msg.hwnd == child) + break; + } + DestroyWindow( hwnd ); DeleteDC( hdc ); DeleteObject( hbm ); -- 2.11.4.GIT