user32/tests: Add a test for calling UpdateLayeredWindow from a different thread.
This commit is contained in:
parent
4289c74f50
commit
b57323a61e
|
@ -13792,6 +13792,27 @@ static const struct message WmSetLayeredStyle2[] = {
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct layered_window_info
|
||||||
|
{
|
||||||
|
HWND hwnd;
|
||||||
|
HDC hdc;
|
||||||
|
SIZE size;
|
||||||
|
HANDLE event;
|
||||||
|
BOOL ret;
|
||||||
|
};
|
||||||
|
|
||||||
|
static DWORD CALLBACK update_layered_proc( void *param )
|
||||||
|
{
|
||||||
|
struct layered_window_info *info = param;
|
||||||
|
POINT src = { 0, 0 };
|
||||||
|
|
||||||
|
info->ret = pUpdateLayeredWindow( info->hwnd, 0, NULL, &info->size,
|
||||||
|
info->hdc, &src, 0, NULL, ULW_OPAQUE );
|
||||||
|
ok( info->ret, "failed\n");
|
||||||
|
SetEvent( info->event );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void test_layered_window(void)
|
static void test_layered_window(void)
|
||||||
{
|
{
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
|
@ -13801,6 +13822,9 @@ static void test_layered_window(void)
|
||||||
SIZE size;
|
SIZE size;
|
||||||
POINT pos, src;
|
POINT pos, src;
|
||||||
RECT rect, client;
|
RECT rect, client;
|
||||||
|
HANDLE thread;
|
||||||
|
DWORD tid;
|
||||||
|
struct layered_window_info info;
|
||||||
|
|
||||||
if (!pUpdateLayeredWindow)
|
if (!pUpdateLayeredWindow)
|
||||||
{
|
{
|
||||||
|
@ -13894,6 +13918,26 @@ static void test_layered_window(void)
|
||||||
broken(rect.right == client.right - 100 && rect.bottom == client.bottom - 50),
|
broken(rect.right == client.right - 100 && rect.bottom == client.bottom - 50),
|
||||||
"wrong client rect %d,%d,%d,%d\n", rect.left, rect.top, rect.right, rect.bottom );
|
"wrong client rect %d,%d,%d,%d\n", rect.left, rect.top, rect.right, rect.bottom );
|
||||||
|
|
||||||
|
SetWindowLong( hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED );
|
||||||
|
info.hwnd = hwnd;
|
||||||
|
info.hdc = hdc;
|
||||||
|
info.size.cx = 250;
|
||||||
|
info.size.cy = 300;
|
||||||
|
info.event = CreateEventA( NULL, TRUE, FALSE, NULL );
|
||||||
|
info.ret = FALSE;
|
||||||
|
thread = CreateThread( NULL, 0, update_layered_proc, &info, 0, &tid );
|
||||||
|
ok( WaitForSingleObject( info.event, 1000 ) == 0, "wait failed\n" );
|
||||||
|
ok( info.ret, "UpdateLayeredWindow failed in other thread\n" );
|
||||||
|
WaitForSingleObject( thread, 1000 );
|
||||||
|
CloseHandle( thread );
|
||||||
|
GetWindowRect( hwnd, &rect );
|
||||||
|
ok( rect.left == 200 && rect.top == 200 && rect.right == 450 && rect.bottom == 500,
|
||||||
|
"wrong window rect %d,%d,%d,%d\n", rect.left, rect.top, rect.right, rect.bottom );
|
||||||
|
GetClientRect( hwnd, &rect );
|
||||||
|
ok( (rect.right == 250 && rect.bottom == 300) ||
|
||||||
|
broken(rect.right == client.right - 100 && rect.bottom == client.bottom - 50),
|
||||||
|
"wrong client rect %d,%d,%d,%d\n", rect.left, rect.top, rect.right, rect.bottom );
|
||||||
|
|
||||||
DestroyWindow( hwnd );
|
DestroyWindow( hwnd );
|
||||||
DeleteDC( hdc );
|
DeleteDC( hdc );
|
||||||
DeleteObject( bmp );
|
DeleteObject( bmp );
|
||||||
|
|
Loading…
Reference in New Issue