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 }
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
HWND hwnd;
|
||||
|
@ -13801,6 +13822,9 @@ static void test_layered_window(void)
|
|||
SIZE size;
|
||||
POINT pos, src;
|
||||
RECT rect, client;
|
||||
HANDLE thread;
|
||||
DWORD tid;
|
||||
struct layered_window_info info;
|
||||
|
||||
if (!pUpdateLayeredWindow)
|
||||
{
|
||||
|
@ -13894,6 +13918,26 @@ static void test_layered_window(void)
|
|||
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 );
|
||||
|
||||
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 );
|
||||
DeleteDC( hdc );
|
||||
DeleteObject( bmp );
|
||||
|
|
Loading…
Reference in New Issue