]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/gdiimage.cpp
applied patch for runtime loading of hhctrl.ocx
[wxWidgets.git] / src / msw / gdiimage.cpp
index d880396fdb7fb834d97010b6fab0dd2a6600bea6..dfc7900a1defbfdea6c20db05e4983113aeefdbf 100644 (file)
@@ -30,6 +30,7 @@
 
 #ifndef WX_PRECOMP
     #include "wx/string.h"
+    #include "wx/log.h"
 #endif // WX_PRECOMP
 
 #include "wx/msw/private.h"
@@ -41,7 +42,7 @@
 #include "wx/msw/gdiimage.h"
 #include "wx/bitmap.h"
 
-#if wxUSE_XPM_IN_MSW
+#if 0 // wxUSE_XPM_IN_MSW
 #   include "wx/xpmhand.h"
 #endif // wxUSE_XPM_IN_MSW
 
@@ -303,7 +304,7 @@ void wxGDIImage::InitStandardHandlers()
 
     // GRG: Add these handlers by default if XPM support is enabled
 
-#if wxUSE_XPM_IN_MSW
+#if 0 // wxUSE_XPM_IN_MSW
     AddHandler(new wxXPMFileHandler);
     AddHandler(new wxXPMDataHandler);
 #endif // wxUSE_XPM_IN_MSW
@@ -390,7 +391,7 @@ bool wxBMPFileHandler::SaveFile(wxBitmap *bitmap,
 
 bool wxICOFileHandler::LoadIcon(wxIcon *icon,
                                 const wxString& name,
-                                long flags,
+                                long WXUNUSED(flags),
                                 int desiredWidth, int desiredHeight)
 {
 #if wxUSE_RESOURCE_LOADING_IN_MSW
@@ -400,7 +401,41 @@ bool wxICOFileHandler::LoadIcon(wxIcon *icon,
     wxSize size;
 
 #ifdef __WIN32__
-    HICON hicon = ::ExtractIcon(wxGetInstance(), name, 0 /* first */);
+    HICON hicon = NULL;
+
+    // were we asked for a large icon?
+    if ( desiredWidth == ::GetSystemMetrics(SM_CXICON) &&
+         desiredHeight == ::GetSystemMetrics(SM_CYICON) )
+    {
+        // get the first large icon from file
+        if ( !::ExtractIconEx(name, 0, &hicon, NULL, 1) )
+        {
+            // it is not an error, but it might still be useful to be informed
+            // about it optionally
+            wxLogTrace(_T("iconload"),
+                       _T("No large icons found in the file '%s'."),
+                       name.c_str());
+        }
+    }
+    else if ( desiredWidth == ::GetSystemMetrics(SM_CXSMICON) &&
+              desiredHeight == ::GetSystemMetrics(SM_CYSMICON) )
+    {
+        // get the first small icon from file
+        if ( !::ExtractIconEx(name, 0, NULL, &hicon, 1) )
+        {
+            wxLogTrace(_T("iconload"),
+                       _T("No small icons found in the file '%s'."),
+                       name.c_str());
+        }
+    }
+    //else: not standard size, load below
+
+    if ( !hicon )
+    {
+        // take any (the first one) icon from the file by default
+        hicon = ::ExtractIcon(wxGetInstance(), name, 0 /* first */);
+    }
+
     if ( !hicon )
     {
         wxLogSysError(_T("Failed to load icon from the file '%s'"),
@@ -419,9 +454,10 @@ bool wxICOFileHandler::LoadIcon(wxIcon *icon,
     if ( (desiredWidth != -1 && desiredWidth != size.x) ||
          (desiredHeight != -1 && desiredHeight != size.y) )
     {
-        wxLogDebug(_T("Returning FALSE from wxICOFileHandler::Load because of the size mismatch: actual (%d, %d), requested (%d, %d)"),
-                      size.x, size.y,
-                      desiredWidth, desiredHeight);
+        wxLogTrace(_T("iconload"),
+                   _T("Returning FALSE from wxICOFileHandler::Load because of the size mismatch: actual (%d, %d), requested (%d, %d)"),
+                   size.x, size.y,
+                   desiredWidth, desiredHeight);
 
         ::DestroyIcon(hicon);
 
@@ -439,7 +475,7 @@ bool wxICOFileHandler::LoadIcon(wxIcon *icon,
 
 bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
                                     const wxString& name,
-                                    long flags,
+                                    long WXUNUSED(flags),
                                     int desiredWidth, int desiredHeight)
 {
     HICON hicon;