]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bitmap.cpp
WinCE fixes (in case a WinCE-friendly backend gets written one day)
[wxWidgets.git] / src / msw / bitmap.cpp
index fb6d081fb6c957e9be8f086eed18c700cfe3082c..4477a07b19651c6ec49255196c2fff6f78e3dde2 100644 (file)
@@ -483,7 +483,7 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
 // Create from XPM data
 bool wxBitmap::CreateFromXpm(const char **data)
 {
-#if wxUSE_IMAGE && wxUSE_XPM
+#if wxUSE_IMAGE && wxUSE_XPM && wxUSE_WXDIB
     Init();
 
     wxCHECK_MSG( data != NULL, false, wxT("invalid bitmap data") )
@@ -1011,7 +1011,7 @@ bool wxBitmap::LoadFile(const wxString& filename, long type)
 
         return handler->LoadFile(this, filename, type, -1, -1);
     }
-#if wxUSE_IMAGE
+#if wxUSE_IMAGE && wxUSE_WXDIB
     else // no bitmap handler found
     {
         wxImage image;
@@ -1055,7 +1055,7 @@ bool wxBitmap::SaveFile(const wxString& filename,
     {
         return handler->SaveFile(this, filename, type, palette);
     }
-#if wxUSE_IMAGE
+#if wxUSE_IMAGE && wxUSE_WXDIB
     else // no bitmap handler found
     {
         // FIXME what about palette? shouldn't we use it?
@@ -1636,23 +1636,33 @@ HICON wxBitmapToIconOrCursor(const wxBitmap& bmp,
         return 0;
     }
 
-    wxMask* mask;
-    wxBitmap newbmp;
     if ( bmp.HasAlpha() )
     {
-        // Convert alpha to a mask.  NOTE: It would be better to actually put
-        // the alpha into the icon instead of making a mask, but I don't have
-        // time to figure that out today.
-        wxImage img = bmp.ConvertToImage();
-        img.ConvertAlphaToMask();
-        newbmp = wxBitmap(img);
-        mask = newbmp.GetMask();
-    }
-    else
-    {
-        mask = bmp.GetMask();
+        // Create an empty mask bitmap.
+        // it doesn't seem to work if we mess with the mask at all.
+        HBITMAP hMonoBitmap = CreateBitmap(bmp.GetWidth(),bmp.GetHeight(),1,1,NULL);
+
+        ICONINFO iconInfo;
+        wxZeroMemory(iconInfo);
+        iconInfo.fIcon = iconWanted;  // do we want an icon or a cursor?
+        if ( !iconWanted )
+        {
+            iconInfo.xHotspot = hotSpotX;
+            iconInfo.yHotspot = hotSpotY;
+        }
+
+        iconInfo.hbmMask = hMonoBitmap;
+        iconInfo.hbmColor = GetHbitmapOf(bmp);
+
+        HICON hicon = ::CreateIconIndirect(&iconInfo);
+
+        ::DeleteObject(hMonoBitmap);
+
+        return hicon;
     }
 
+    wxMask* mask = bmp.GetMask();
+
     if ( !mask )
     {
         // we must have a mask for an icon, so even if it's probably incorrect,