List view should sent LVN_ODCACHEHINT notification before paint when it's virtual list (LVS_OWNERDATA style). We were sending it only in OwnerDraw. Vitaliy Margolen changelog: dlls/comctrl32/listview.c - send LVN_ODCACHEHINT notification for LVS_OWNERDATA style in report and list modes Index: dlls/comctl32/listview.c =================================================================== RCS file: /home/wine/wine/dlls/comctl32/listview.c,v retrieving revision 1.345 diff -u -r1.345 listview.c --- dlls/comctl32/listview.c 15 Mar 2003 00:05:46 -0000 1.345 +++ dlls/comctl32/listview.c 22 Mar 2003 21:14:40 -0000 @@ -3729,6 +3729,18 @@ /* figure out what we need to draw */ iterator_visibleitems(&i, infoPtr, hdc); + /* send cache hint notification */ + if (infoPtr->dwStyle & LVS_OWNERDATA) + { + RANGE range = iterator_range(&i); + NMLVCACHEHINT nmlv; + + ZeroMemory(&nmlv, sizeof(NMLVCACHEHINT)); + nmlv.iFrom = range.lower; + nmlv.iTo = range.upper - 1; + notify_hdr(infoPtr, LVN_ODCACHEHINT, &nmlv.hdr); + } + /* iterate through the invalidated rows */ while(iterator_next(&i)) { @@ -3777,6 +3789,18 @@ /* figure out what we need to draw */ iterator_visibleitems(&i, infoPtr, hdc); + /* send cache hint notification */ + if (infoPtr->dwStyle & LVS_OWNERDATA) + { + RANGE range = iterator_range(&i); + NMLVCACHEHINT nmlv; + + ZeroMemory(&nmlv, sizeof(NMLVCACHEHINT)); + nmlv.iFrom = range.lower; + nmlv.iTo = range.upper - 1; + notify_hdr(infoPtr, LVN_ODCACHEHINT, &nmlv.hdr); + } + while(iterator_prev(&i)) { LISTVIEW_GetItemOrigin(infoPtr, i.nItem, &Position);