Yes, you must test if the row is selected
Like :
bool IsRowSelected(HWND hWnd, int nRow)
{
return ListView_GetItemState(hWnd, nRow, LVIS_SELECTED | LVIS_FOCUSED) != 0;
}
then :
if (IsRowSelected(nm->nmcd.hdr.hwndFrom, nm->nmcd.dwItemSpec))
{
// Draw icon with selected color background
// ... your code ...
return CDRF_SKIPDEFAULT;
}
else
{
hIcon = ImageList_GetIcon(hImageList, 0, ILD_NORMAL);
DrawIconEx(nm->nmcd.hdc, rc.left + 5, (rc.top + rc.bottom - GetSystemMetrics(SM_CYSMICON)) / 2, hIcon, 16, 16, 0, NULL, DI_NORMAL);
DestroyIcon(hIcon);
return CDRF_SKIPDEFAULT;
}
or
if (IsRowSelected(nm->nmcd.hdr.hwndFrom, nm->nmcd.dwItemSpec))
FillRect(nm->nmcd.hdc, &rc, GetSysColorBrush(COLOR_HIGHLIGHT));
{
hIcon = ImageList_GetIcon(hImageList, 0, ILD_NORMAL);
DrawIconEx(nm->nmcd.hdc, rc.left + 5, (rc.top + rc.bottom - GetSystemMetrics(SM_CYSMICON)) / 2, hIcon, 16, 16, 0, NULL, DI_NORMAL);
DestroyIcon(hIcon);
}
return CDRF_SKIPDEFAULT;