comctl32/tests: Test themed painting after a WM_SETTEXT message.

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zhiyi Zhang 2021-03-03 14:48:34 +08:00 committed by Alexandre Julliard
parent 049bd08d8b
commit 9dd0c07d7f

View file

@ -29,6 +29,8 @@
#define IS_WNDPROC_HANDLE(x) (((ULONG_PTR)(x) >> 16) == (~0u >> 16))
static BOOL is_theme_active;
static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
static BOOL (WINAPI *pRemoveWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR);
static LRESULT (WINAPI *pDefSubclassProc)(HWND, UINT, WPARAM, LPARAM);
@ -118,6 +120,22 @@ static BOOL ignore_message( UINT message )
message == WM_GETTEXT);
}
static BOOL equal_dc(HDC hdc1, HDC hdc2, int width, int height)
{
int x, y;
for (x = 0; x < width; ++x)
{
for (y = 0; y < height; ++y)
{
if (GetPixel(hdc1, x, y) != GetPixel(hdc2, x, y))
return FALSE;
}
}
return TRUE;
}
static LRESULT CALLBACK button_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, UINT_PTR id, DWORD_PTR ref_data)
{
static LONG defwndproc_counter = 0;
@ -2304,14 +2322,77 @@ static void test_style(void)
}
}
static void test_visual(void)
{
HBITMAP mem_bitmap1, mem_bitmap2;
HDC mem_dc1, mem_dc2, button_dc;
HWND button, parent;
int width, height;
DWORD type;
RECT rect;
parent = CreateWindowA("TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100,
100, 200, 200, 0, 0, 0, NULL);
ok(!!parent, "Failed to create the parent window.\n");
for (type = BS_PUSHBUTTON; type <= BS_DEFCOMMANDLINK; ++type)
{
/* Use WS_DISABLED to avoid glowing animations on Vista and Win7 */
button = create_button(type | WS_VISIBLE | WS_DISABLED, parent);
flush_events();
button_dc = GetDC(button);
GetClientRect(button, &rect);
width = rect.right - rect.left;
height = rect.bottom - rect.top;
mem_dc1 = CreateCompatibleDC(button_dc);
mem_bitmap1 = CreateCompatibleBitmap(button_dc, width, height);
SelectObject(mem_dc1, mem_bitmap1);
BitBlt(mem_dc1, 0, 0, width, height, button_dc, 0, 0, SRCCOPY);
/* Send WM_SETTEXT with the same window name */
SendMessageA(button, WM_SETTEXT, 0, (LPARAM)"test");
flush_events();
mem_dc2 = CreateCompatibleDC(button_dc);
mem_bitmap2 = CreateCompatibleBitmap(button_dc, width, height);
SelectObject(mem_dc2, mem_bitmap2);
BitBlt(mem_dc2, 0, 0, width, height, button_dc, 0, 0, SRCCOPY);
todo_wine_if(type == BS_PUSHBOX || (is_theme_active && !(type == BS_OWNERDRAW
|| type == BS_COMMANDLINK || type == BS_DEFCOMMANDLINK)))
ok(equal_dc(mem_dc1, mem_dc2, width, height), "Type %#x: Expected content unchanged.\n", type);
DeleteObject(mem_bitmap2);
DeleteObject(mem_bitmap1);
DeleteDC(mem_dc2);
DeleteDC(mem_dc1);
ReleaseDC(button, button_dc);
DestroyWindow(button);
}
DestroyWindow(parent);
}
START_TEST(button)
{
BOOL (WINAPI * pIsThemeActive)(VOID);
ULONG_PTR ctx_cookie;
HMODULE uxtheme;
HANDLE hCtx;
if (!load_v6_module(&ctx_cookie, &hCtx))
return;
uxtheme = LoadLibraryA("uxtheme.dll");
if (uxtheme)
{
pIsThemeActive = (void*)GetProcAddress(uxtheme, "IsThemeActive");
if (pIsThemeActive)
is_theme_active = pIsThemeActive();
FreeLibrary(uxtheme);
}
register_parent_class();
init_functions();
@ -2327,6 +2408,7 @@ START_TEST(button)
test_state();
test_bcm_get_ideal_size();
test_style();
test_visual();
unload_v6_module(ctx_cookie, hCtx);
}