- int currentX, currentY;
- GetPosition(¤tX, ¤tY);
- int x1 = x;
- int y1 = y;
-
- if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- x1 = currentX;
- if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- y1 = currentY;
-
- int actualWidth = width;
- int actualHeight = height;
-
- int ww, hh;
- GetSize(&ww, &hh);
-
- // If we're prepared to use the existing width, then...
- if (width == -1 && ((sizeFlags & wxSIZE_AUTO_WIDTH) != wxSIZE_AUTO_WIDTH))
- actualWidth = ww;
- else actualWidth = width;
-
- // If we're prepared to use the existing height, then...
- if (height == -1 && ((sizeFlags & wxSIZE_AUTO_HEIGHT) != wxSIZE_AUTO_HEIGHT))
- actualHeight = hh;
- else actualHeight = height;
-
- MoveWindow((HWND) GetHWND(), x1, y1, actualWidth, actualHeight, TRUE);
-
- if (!((width == -1) && (height == -1)))
- {
-#if WXWIN_COMPATIBILITY
- GetEventHandler()->OldOnSize(actualWidth, actualHeight);
-#else
- wxSizeEvent event(wxSize(actualWidth, actualHeight), m_windowId);
- event.eventObject = this;
- GetEventHandler()->ProcessEvent(event);
-#endif
- }
+ if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
+ return false;
+
+ // we may have either bitmap or icon: if a bitmap with mask is passed, we
+ // will transform it to an icon ourselves because otherwise the mask will
+ // be ignored by Windows
+ m_isIcon = bitmap.IsKindOf(wxCLASSINFO(wxIcon));
+
+ wxGDIImage *image = ConvertImage( bitmap );
+ m_isIcon = image->IsKindOf( wxCLASSINFO(wxIcon) );
+
+ // create the native control
+ if ( !MSWCreateControl(wxT("STATIC"), wxEmptyString, pos, size) )
+ {
+ // control creation failed
+ return false;
+ }
+
+ // no need to delete the new image
+ SetImageNoCopy(image);
+
+ // GetBestSize will work properly now, so set the best size if needed
+ SetInitialSize(size);
+
+ // painting manually is reported not to work under Windows CE (see #10093),
+ // so don't do it there even if this probably means that alpha is not
+ // supported there -- but at least bitmaps without alpha appear correctly
+#ifndef __WXWINCE__
+ // Windows versions before XP (and even XP if the application has no
+ // manifest and so the old comctl32.dll is used) don't draw correctly the
+ // images with alpha channel so we need to draw them ourselves and it's
+ // easier to just always do it rather than check if we have an image with
+ // alpha or not
+ if ( wxTheApp->GetComCtl32Version() < 600 )
+ {
+ Connect(wxEVT_PAINT, wxPaintEventHandler(wxStaticBitmap::DoPaintManually));
+ }
+#endif // !__WXWINCE__
+
+ return true;