X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad81651f00edc6f489d9b6a0839d316a964fd521..d3e780ecdf69233c872d51216eedbc64a1b6db25:/src/msw/icon.cpp diff --git a/src/msw/icon.cpp b/src/msw/icon.cpp index 00b0741ab7..9064101a53 100644 --- a/src/msw/icon.cpp +++ b/src/msw/icon.cpp @@ -5,8 +5,8 @@ // Modified by: 20.11.99 (VZ): don't derive from wxBitmap any more // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "icon.h" #endif @@ -34,20 +34,17 @@ #include "wx/utils.h" #include "wx/app.h" #include "wx/icon.h" + #include "wx/bitmap.h" + #include "wx/log.h" #endif #include "wx/msw/private.h" -#if wxUSE_RESOURCE_LOADING_IN_MSW - #include "wx/msw/curico.h" - #include "wx/msw/curicop.h" -#endif - // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- - IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxIconBase) +IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxGDIObject) // ============================================================================ // implementation @@ -61,7 +58,9 @@ void wxIconRefData::Free() { if ( m_hIcon ) { +#ifndef __WXMICROWIN__ ::DestroyIcon((HICON) m_hIcon); +#endif m_hIcon = 0; } @@ -71,14 +70,10 @@ void wxIconRefData::Free() // wxIcon // ---------------------------------------------------------------------------- -wxIcon::wxIcon() -{ -} - -wxIcon::wxIcon(const char WXUNUSED(bits)[], - int WXUNUSED(width), - int WXUNUSED(height)) +wxIcon::wxIcon(const char bits[], int width, int height) { + wxBitmap bmp(bits, width, height); + CopyFromBitmap(bmp); } wxIcon::wxIcon(const wxString& iconfile, @@ -90,10 +85,45 @@ wxIcon::wxIcon(const wxString& iconfile, LoadFile(iconfile, flags, desiredWidth, desiredHeight); } +wxIcon::wxIcon(const wxIconLocation& loc) +{ + // wxICOFileHandler accepts names in the format "filename;index" + wxString fullname = loc.GetFileName(); + if ( loc.GetIndex() ) + { + fullname << _T(';') << loc.GetIndex(); + } + //else: 0 is default + + LoadFile(fullname, wxBITMAP_TYPE_ICO); +} + wxIcon::~wxIcon() { } +void wxIcon::CopyFromBitmap(const wxBitmap& bmp) +{ +#ifndef __WXMICROWIN__ + HICON hicon = wxBitmapToHICON(bmp); + if ( !hicon ) + { + wxLogLastError(wxT("CreateIconIndirect")); + } + else + { + SetHICON((WXHICON)hicon); + SetSize(bmp.GetWidth(), bmp.GetHeight()); + } +#endif // __WXMICROWIN__ +} + +void wxIcon::CreateIconFromXpm(const char **data) +{ + wxBitmap bmp(data); + CopyFromBitmap(bmp); +} + bool wxIcon::LoadFile(const wxString& filename, long type, int desiredWidth, int desiredHeight)