use wxBitmapToHICON/CURSOR()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19721 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-03-23 01:48:15 +00:00
parent c11bf84234
commit 7fd328a34d
2 changed files with 29 additions and 187 deletions

View File

@@ -40,11 +40,6 @@
#include "wx/msw/private.h"
#if wxUSE_RESOURCE_LOADING_IN_MSW
#include "wx/msw/curico.h"
#include "wx/msw/curicop.h"
#endif
// ----------------------------------------------------------------------------
// wxWin macros
// ----------------------------------------------------------------------------
@@ -97,36 +92,7 @@ wxIcon::~wxIcon()
void wxIcon::CopyFromBitmap(const wxBitmap& bmp)
{
#ifndef __WXMICROWIN__
#ifdef __WIN32__
wxMask *mask = bmp.GetMask();
if ( !mask )
{
// we must have a mask for an icon, so even if it's probably incorrect,
// do create it (grey is the "standard" transparent colour)
mask = new wxMask(bmp, *wxLIGHT_GREY);
}
ICONINFO iconInfo;
iconInfo.fIcon = TRUE; // we want an icon, not a cursor
iconInfo.hbmMask = wxInvertMask((HBITMAP)mask->GetMaskBitmap());
iconInfo.hbmColor = GetHbitmapOf(bmp);
// black out the transparent area to preserve background colour, because
// Windows blits the original bitmap using SRCINVERT (XOR) after applying
// the mask to the dest rect.
{
MemoryHDC dcSrc, dcDst;
SelectInHDC selectMask(dcSrc, (HBITMAP)mask->GetMaskBitmap()),
selectBitmap(dcDst, iconInfo.hbmColor);
if ( !::BitBlt(dcDst, 0, 0, bmp.GetWidth(), bmp.GetHeight(),
dcSrc, 0, 0, SRCAND) )
{
wxLogLastError(_T("BitBlt"));
}
}
HICON hicon = ::CreateIconIndirect(&iconInfo);
HICON hicon = wxBitmapToHICON(bmp);
if ( !hicon )
{
wxLogLastError(wxT("CreateIconIndirect"));
@@ -136,29 +102,7 @@ void wxIcon::CopyFromBitmap(const wxBitmap& bmp)
SetHICON((WXHICON)hicon);
SetSize(bmp.GetWidth(), bmp.GetHeight());
}
if ( !bmp.GetMask() )
{
// we created the mask, now delete it
delete mask;
}
// delete the inverted mask bitmap we created as well
::DeleteObject(iconInfo.hbmMask);
#else // Win16
/*
// This probably doesn't work.
HBITMAP hBitmap = (HBITMAP) bmp.GetHBITMAP();
HICON hIcon = MakeIconFromBitmap((HINSTANCE) wxGetInstance(), hBitmap);
if (hIcon)
{
SetHICON((WXHICON)hIcon);
SetSize(bmp.GetWidth(), bmp.GetHeight());
}
*/
wxFAIL_MSG("Bitmap to icon conversion (including use of XPMs for icons) not implemented");
#endif // Win32/16
#endif
#endif // __WXMICROWIN__
}
void wxIcon::CreateIconFromXpm(const char **data)