[PATCH] comctl32: Listbox item height is no longer limited to 255.
Francois Gouget
fgouget at free.fr
Mon Nov 4 10:13:28 CST 2019
The change happened between Windows 10 1607 and 1709 in comctl32 v6.
Signed-off-by: Francois Gouget <fgouget at free.fr>
---
I confirmed the change in behavior by running ControlSpyV6.exe and
manually sending the LB_SETITEMHEIGHT and LB_GETITEMHEIGHT messages, and
also observing the impact on the rendering.
I also ran the test in ControlSpyV5.exe which shows that comctl32 v5
still enforces the 255 height limit.
I chose to have Wine implement the new behavior but maybe that should be
dependent on v5 vs v6. Not sure how that's handled though.
dlls/comctl32/listbox.c | 2 +-
dlls/comctl32/tests/listbox.c | 25 ++++++++++++++++++++++---
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/listbox.c b/dlls/comctl32/listbox.c
index ab4c481aabc..0d6dcd6a0b8 100644
--- a/dlls/comctl32/listbox.c
+++ b/dlls/comctl32/listbox.c
@@ -1280,7 +1280,7 @@ static LRESULT LISTBOX_GetItemHeight( const LB_DESCR *descr, INT index )
*/
static LRESULT LISTBOX_SetItemHeight( LB_DESCR *descr, INT index, INT height, BOOL repaint )
{
- if (height > MAXBYTE)
+ if (height > MAXWORD)
return -1;
if (!height) height = 1;
diff --git a/dlls/comctl32/tests/listbox.c b/dlls/comctl32/tests/listbox.c
index 70e212892a4..d547fecc588 100644
--- a/dlls/comctl32/tests/listbox.c
+++ b/dlls/comctl32/tests/listbox.c
@@ -769,11 +769,30 @@ static void test_listbox_height(void)
r = SendMessageA(hList, LB_GETITEMHEIGHT, 0, 0 );
ok( r == 20, "height wrong\n");
+ /* Before Windows 10 1709 (or 1703?) the item height was limited to 255.
+ * Since then, with comctl32 V6 the limit is 65535.
+ */
r = SendMessageA( hList, LB_SETITEMHEIGHT, 0, MAKELPARAM( 256, 0 ));
- ok( r == -1, "Failed to set item height, %d.\n", r);
+ if (r == -1)
+ {
+ ok(broken(r == -1), "Failed to set item height, %d.\n", r);
- r = SendMessageA(hList, LB_GETITEMHEIGHT, 0, 0 );
- ok( r == 20, "Unexpected item height %d.\n", r);
+ r = SendMessageA(hList, LB_GETITEMHEIGHT, 0, 0 );
+ ok( r == 20, "Unexpected item height %d.\n", r);
+ }
+ else
+ {
+ ok(r == 0, "Failed to set item height, %d.\n", r);
+
+ r = SendMessageA(hList, LB_GETITEMHEIGHT, 0, 0 );
+ ok( r == 256, "Unexpected item height %d.\n", r);
+
+ r = SendMessageA( hList, LB_SETITEMHEIGHT, 0, MAKELPARAM( 65535, 0 ));
+ ok(r == 0, "Failed to set item height, %d.\n", r);
+
+ r = SendMessageA(hList, LB_GETITEMHEIGHT, 0, 0 );
+ ok( r == 65535, "Unexpected item height %d.\n", r);
+ }
r = SendMessageA( hList, LB_SETITEMHEIGHT, 0, MAKELPARAM( 0xff, 0 ));
ok( r == 0, "send message failed\n");
--
2.20.1
More information about the wine-devel
mailing list