Hi, thanks for the patch. Some comments below.
- HWND hCombo;
- HFONT hFont;
- int height;
- /* This test requires the WC_COMBOBOXA style. It won't work for WC_COMBOBOXEXA */
- hCombo = CreateWindowExA(0, WC_COMBOBOXA, NULL, WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWN, 0, 0, 300, 300,
hComboExParentWnd, NULL, hMainHinst, NULL);
- /* Add items to the combobox */
- SendMessageA(hCombo, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)"Item 0");
- SendMessageA(hCombo, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)"Item 1");
- SendMessageA(hCombo, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)"Item 2");
- SendMessageA(hCombo, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)"Item 3");
- SendMessageA(hCombo, CB_SETCURSEL, 1, 0);
I don't think this is necessary. You don't need any string to trigger this feature.
- /* Create large enough font for test to work. */
- hFont = CreateFontA(17, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, "Marlett");
- SendMessageA(hCombo, WM_SETFONT, (WPARAM)hFont, FALSE);
- /* Set Item Height followed by SetWindowPos() is the test */
- SendMessageA(hCombo, CB_SETITEMHEIGHT, -1, 4);
- /* SetWindowPos() should set the height according to font size*/
- SetWindowPos(hCombo,NULL, 10,10,150,20, SWP_SHOWWINDOW);
- height = SendMessageA(hCombo, CB_GETITEMHEIGHT, -1, 0);
- ok(height > 6, "SetWindowPos() failed. Height (%d)\n", height);
You don't need special font either I think. The point is to set item height smaller than its natural default, and then trigger window size update. So you could set height to a half of current item height to the same effect I believe.
- /* Cleanup */
- DestroyWindow(hCombo);
- DeleteObject(hFont);
P.S. subject line is inaccurate because patch does not fix anything. Same test would apply to user32 implementation too.