diff --git a/src/msw/imaglist.cpp b/src/msw/imaglist.cpp index 0b216d5b39..460de7f0c5 100644 --- a/src/msw/imaglist.cpp +++ b/src/msw/imaglist.cpp @@ -230,6 +230,19 @@ int wxImageList::Add(const wxBitmap& bitmap, const wxColour& maskColour) // Adds a bitmap and mask from an icon. int wxImageList::Add(const wxIcon& icon) { + // ComCtl32 prior 6.0 doesn't support images with alpha + // channel so if we have 32-bit icon with transparency + // we need to add it as a wxBitmap via dedicated method + // where alpha channel will be converted to the mask. + if ( wxApp::GetComCtl32Version() < 600 ) + { + wxBitmap bmp(icon); + if ( bmp.HasAlpha() ) + { + return Add(bmp); + } + } + int index = ImageList_AddIcon(GetHImageList(), GetHiconOf(icon)); if ( index == -1 ) { @@ -292,6 +305,19 @@ bool wxImageList::Replace(int index, // Replaces a bitmap and mask from an icon. bool wxImageList::Replace(int i, const wxIcon& icon) { + // ComCtl32 prior 6.0 doesn't support images with alpha + // channel so if we have 32-bit icon with transparency + // we need to replace it as a wxBitmap via dedicated method + // where alpha channel will be converted to the mask. + if ( wxApp::GetComCtl32Version() < 600 ) + { + wxBitmap bmp(icon); + if ( bmp.HasAlpha() ) + { + return Replace(i, bmp); + } + } + bool ok = ImageList_ReplaceIcon(GetHImageList(), i, GetHiconOf(icon)) != -1; if ( !ok ) { diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index dfc8128eb6..3c0675eb7b 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -1341,6 +1341,18 @@ void wxListCtrl::SetImageList(wxImageList *imageList, int which) m_ownsImageListState = false; } (void) ListView_SetImageList(GetHwnd(), (HIMAGELIST) imageList ? imageList->GetHIMAGELIST() : 0, flags); + + // For ComCtl32 prior 6.0 we need to re-assign all existing + // text labels in order to position them correctly. + if ( wxApp::GetComCtl32Version() < 600 ) + { + const int n = GetItemCount(); + for( int i = 0; i < n; i++ ) + { + wxString text = GetItemText(i); + SetItemText(i, text); + } + } } void wxListCtrl::AssignImageList(wxImageList *imageList, int which)