// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "imaglist.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#pragma hdrstop
#endif
-#if defined(__WIN95__)
-
#ifndef WX_PRECOMP
#include "wx/window.h"
#include "wx/icon.h"
#include "wx/dc.h"
#include "wx/string.h"
#include "wx/dcmemory.h"
-
+ #include "wx/intl.h"
+ #include "wx/log.h"
+ #include "wx/image.h"
#include <stdio.h>
#endif
-#include "wx/log.h"
-#include "wx/intl.h"
-
#include "wx/msw/imaglist.h"
#include "wx/msw/private.h"
-#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__))
- #include <commctrl.h>
-#endif
+// include <commctrl.h> "properly"
+#include "wx/msw/wrapcctl.h"
// ----------------------------------------------------------------------------
// wxWin macros
GetHbitmapOf(bitmap), hbmpMask) != 0;
if ( !ok )
{
- wxLogLastError(wxT("ImageList_Add()"));
+ wxLogLastError(wxT("ImageList_Replace()"));
}
::DeleteObject(hbmpMask);
// Replaces a bitmap and mask from an icon.
bool wxImageList::Replace(int i, const wxIcon& icon)
{
- bool ok = ImageList_ReplaceIcon(GetHImageList(), i, GetHiconOf(icon)) != 0;
+ bool ok = ImageList_ReplaceIcon(GetHImageList(), i, GetHiconOf(icon)) != -1;
if ( !ok )
{
wxLogLastError(wxT("ImageList_ReplaceIcon()"));
return ok;
}
+// Get the bitmap
+wxBitmap wxImageList::GetBitmap(int index) const
+{
+#if wxUSE_WXDIB
+ int bmp_width = 0, bmp_height = 0;
+ GetSize(index, bmp_width, bmp_height);
+
+ wxBitmap bitmap(bmp_width, bmp_height);
+ wxMemoryDC dc;
+ dc.SelectObject(bitmap);
+
+ // draw it the first time to find a suitable mask colour
+ ((wxImageList*)this)->Draw(index, dc, 0, 0, wxIMAGELIST_DRAW_TRANSPARENT);
+ dc.SelectObject(wxNullBitmap);
+
+ // find the suitable mask colour
+ wxImage image = bitmap.ConvertToImage();
+ unsigned char r = 0, g = 0, b = 0;
+ image.FindFirstUnusedColour(&r, &g, &b);
+
+ // redraw whole image and bitmap in the mask colour
+ image.Create(bmp_width, bmp_height);
+ image.Replace(0, 0, 0, r, g, b);
+ bitmap = wxBitmap(image);
+
+ // redraw icon over the mask colour to actually draw it
+ dc.SelectObject(bitmap);
+ ((wxImageList*)this)->Draw(index, dc, 0, 0, wxIMAGELIST_DRAW_TRANSPARENT);
+ dc.SelectObject(wxNullBitmap);
+
+ // get the image, set the mask colour and convert back to get transparent bitmap
+ image = bitmap.ConvertToImage();
+ image.SetMaskColour(r, g, b);
+ bitmap = wxBitmap(image);
+#else
+ wxBitmap bitmap;
+#endif
+ return bitmap;
+}
+
+// Get the icon
+wxIcon wxImageList::GetIcon(int index) const
+{
+ HICON hIcon = ImageList_ExtractIcon(0, GetHImageList(), index);
+ if (hIcon)
+ {
+ wxIcon icon;
+ icon.SetHICON((WXHICON)hIcon);
+
+ int iconW, iconH;
+ GetSize(index, iconW, iconH);
+ icon.SetSize(iconW, iconH);
+
+ return icon;
+ }
+ else
+ return wxNullIcon;
+}
+
// ----------------------------------------------------------------------------
// helpers
// ----------------------------------------------------------------------------
return hbmpMaskInv;
}
-
-#endif // Win95
-