it.cchTextMax = WXSIZEOF(text);
ListView_GetItem(hwndList, &it);
- if ( it.iImage != -1 )
+ HIMAGELIST himl = ListView_GetImageList(hwndList, LVSIL_SMALL);
+ if ( himl && ImageList_GetImageCount(himl) )
{
- HIMAGELIST himl = ListView_GetImageList(hwndList, LVSIL_SMALL);
-
- ImageList_Draw(himl, it.iImage, hdc, rc.left, rc.top,
- nmcd.uItemState & CDIS_SELECTED ? ILD_SELECTED
- : ILD_TRANSPARENT);
+ if ( it.iImage != -1 )
+ {
+ ImageList_Draw(himl, it.iImage, hdc, rc.left, rc.top,
+ nmcd.uItemState & CDIS_SELECTED ? ILD_SELECTED
+ : ILD_TRANSPARENT);
+ }
- int wImage, hImage;
- ImageList_GetIconSize(himl, &wImage, &hImage);
+ // notice that even if this item doesn't have any image, the list
+ // control still leaves space for the image in the first column if the
+ // image list is not empty (presumably so that items with and without
+ // images align?)
+ if ( it.iImage != -1 || it.iSubItem == 0 )
+ {
+ int wImage, hImage;
+ ImageList_GetIconSize(himl, &wImage, &hImage);
- rc.left += wImage + 2;
+ rc.left += wImage + 2;
+ }
}
::SetBkMode(hdc, TRANSPARENT);
}
// same thing for CDIS_FOCUS (except simpler as there is only one of them)
- if ( ListView_GetNextItem(hwndList, -1, LVNI_FOCUSED) == item )
+ if ( ::GetFocus() == hwndList &&
+ ListView_GetNextItem(hwndList, -1, LVNI_FOCUSED) == item )
{
nmcd.uItemState |= CDIS_FOCUS;
}
// set the colours to use for text drawing
- pLVCD->clrText = wxColourToRGB(attr->HasTextColour()
- ? attr->GetTextColour()
- : listctrl->GetTextColour());
- pLVCD->clrTextBk = wxColourToRGB(attr->HasBackgroundColour()
- ? attr->GetBackgroundColour()
- : listctrl->GetBackgroundColour());
+ pLVCD->clrText = attr->HasTextColour()
+ ? wxColourToRGB(attr->GetTextColour())
+ : wxColourToRGB(listctrl->GetTextColour());
+ pLVCD->clrTextBk = attr->HasBackgroundColour()
+ ? wxColourToRGB(attr->GetBackgroundColour())
+ : wxColourToRGB(listctrl->GetBackgroundColour());
// select the font if non default one is specified
if ( attr->HasFont() )