NM_CUSTOMDRAW with CDDS_ITEMPREPAINT | CDDS_SUBITEM and CDDS_ITEMPOSTPAINT | CDDS_SUBITEM will be called in Report view mode even for columns that are not visible. You can optimize expensive draw/lookup operations away by checking the RECT returned from ListView_GetSubItemRect() to make sure RECT.right - RECT.left > 0.