This patch fixes a bug in GetSubItemRect where the list origin was being added twice to the returned rectangle, once in GetItemPosition and once in GetSubItemRect.
Index: dlls/comctl32/listview.c =================================================================== RCS file: /home/wine/wine/dlls/comctl32/listview.c,v retrieving revision 1.333 diff -u -r1.333 listview.c --- dlls/comctl32/listview.c 10 Dec 2002 19:07:27 -0000 1.333 +++ dlls/comctl32/listview.c 15 Dec 2002 21:48:42 -0000 @@ -5204,14 +5204,13 @@ */ static BOOL LISTVIEW_GetSubItemRect(LISTVIEW_INFO *infoPtr, INT nItem, LPRECT lprc) { - POINT Position, Origin; + POINT Position; LVITEMW lvItem; if (!lprc || (infoPtr->dwStyle & LVS_TYPEMASK) != LVS_REPORT) return FALSE; TRACE("(nItem=%d, nSubItem=%d)\n", nItem, lprc->top); - LISTVIEW_GetOrigin(infoPtr, &Origin); if (!LISTVIEW_GetItemPosition(infoPtr, nItem, &Position)) return FALSE; lvItem.mask = lprc->top == 0 ? LVIF_INDENT : 0; @@ -5235,7 +5234,7 @@ return FALSE; } - OffsetRect(lprc, Position.x + Origin.x, Position.y + Origin.y); + OffsetRect(lprc, Position.x, Position.y); return TRUE; }