From: Paul Gofman pgofman@codeweavers.com
--- dlls/comctl32/tests/combo.c | 68 +++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+)
diff --git a/dlls/comctl32/tests/combo.c b/dlls/comctl32/tests/combo.c index 5af530ad5be..e193b9458a4 100644 --- a/dlls/comctl32/tests/combo.c +++ b/dlls/comctl32/tests/combo.c @@ -1689,6 +1689,70 @@ static void test_combo_keypresses(void) DestroyWindow(combo); }
+static int test_wm_measureitem_count; + +static LRESULT CALLBACK test_measure_item_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + if (msg == WM_MEASUREITEM) + { + MEASUREITEMSTRUCT *m = (MEASUREITEMSTRUCT *)lparam; + unsigned int expected; + + ++test_wm_measureitem_count; + ok(m->CtlType == ODT_COMBOBOX, "got %#x.\n", m->CtlType); + ok(m->CtlID == COMBO_ID, "got %u.\n", m->CtlID); + expected = get_font_height(GetStockObject(SYSTEM_FONT)) + 2; + if (m->itemID == -1) + { + todo_wine ok(m->itemHeight == expected, "got %u, expected %u.\n", m->itemHeight, expected); + m->itemHeight = expected + 4; + } + return TRUE; + } + return DefWindowProcA(hwnd, msg, wparam, lparam); +} + +static void test_combo_measureitem(DWORD style) +{ + unsigned int expected; + HWND parent, combo; + WNDCLASSW wc; + RECT r; + + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = GetModuleHandleA(NULL); + wc.hIcon = NULL; + wc.hCursor = LoadCursorA(NULL, (LPCSTR)IDC_ARROW); + wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); + wc.lpszMenuName = NULL; + wc.lpszClassName = L"test_measure_item"; + wc.lpfnWndProc = test_measure_item_wnd_proc; + RegisterClassW(&wc); + + winetest_push_context("style %#lx", style); + parent = CreateWindowA("test_measure_item", "Test measure", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 10, 10, 300, 300, NULL, NULL, NULL, 0); + test_wm_measureitem_count = 0; + combo = CreateWindowA(WC_COMBOBOXA, "Combo", WS_VISIBLE|WS_CHILD|style, 5, 5, 100, 100, parent, (HMENU)COMBO_ID, NULL, 0); + if (style & CBS_OWNERDRAWFIXED) + ok(test_wm_measureitem_count == 2, "got %d.\n", test_wm_measureitem_count); + else if (style & CBS_OWNERDRAWVARIABLE) + ok(test_wm_measureitem_count == 1, "got %d.\n", test_wm_measureitem_count); + else + ok(!test_wm_measureitem_count, "got %d.\n", test_wm_measureitem_count); + GetClientRect(combo, &r); + expected = get_font_height(GetStockObject(SYSTEM_FONT)) + 8; + if (style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE)) + expected += 4; + todo_wine_if(style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE)) expect_rect(r, 0, 0, 100, expected); + + DestroyWindow(combo); + DestroyWindow(parent); + UnregisterClassW(L"test_measure_item", GetModuleHandleA(NULL)); + winetest_pop_context(); +} + START_TEST(combo) { ULONG_PTR ctx_cookie; @@ -1742,6 +1806,10 @@ START_TEST(combo) test_combo_dropdown_size(CBS_NOINTEGRALHEIGHT); test_combo_ctlcolor(); test_combo_keypresses(); + test_combo_measureitem(CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED); + test_combo_measureitem(CBS_DROPDOWNLIST | CBS_OWNERDRAWVARIABLE); + test_combo_measureitem(CBS_DROPDOWNLIST); + test_combo_measureitem(CBS_DROPDOWN | CBS_OWNERDRAWFIXED);
cleanup(); unload_v6_module(ctx_cookie, hCtx);