]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bmpbuttn.cpp
fixed wxComboBox sizing problem again
[wxWidgets.git] / src / msw / bmpbuttn.cpp
index 744c8a48b689da30a5060e0c5637ec491efab824..32d792972af1192df435b8216b26ab42dccf70d9 100644 (file)
@@ -75,13 +75,29 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit
   if ( height == -1 && bitmap.Ok())
     height = bitmap.GetHeight() + 2*m_marginY;
 
+       long msStyle = WS_VISIBLE | WS_TABSTOP | WS_CHILD | BS_OWNERDRAW ;
+
+    if ( m_windowStyle & wxCLIP_SIBLINGS )
+        msStyle |= WS_CLIPSIBLINGS;
+
+#ifdef __WIN32__
+    if(m_windowStyle & wxBU_LEFT)
+        msStyle |= BS_LEFT;
+    if(m_windowStyle & wxBU_RIGHT)
+        msStyle |= BS_RIGHT;
+    if(m_windowStyle & wxBU_TOP)
+        msStyle |= BS_TOP;
+    if(m_windowStyle & wxBU_BOTTOM)
+        msStyle |= BS_BOTTOM;
+#endif
+
   m_hWnd = (WXHWND)CreateWindowEx
                    (
                     0,
                     wxT("BUTTON"),
                     wxT(""),
-                    WS_VISIBLE | WS_TABSTOP | WS_CHILD | BS_OWNERDRAW ,
-                    0, 0, 0, 0, 
+                    msStyle,
+                    0, 0, 0, 0,
                     GetWinHwnd(parent),
                     (HMENU)m_windowId,
                     wxGetInstance(),
@@ -103,6 +119,9 @@ void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap)
   m_buttonBitmap = bitmap;
 }
 
+// VZ: should be at the very least less than wxDEFAULT_BUTTON_MARGIN
+#define FOCUS_MARGIN 3
+
 bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item)
 {
 #if defined(__WIN95__)
@@ -144,8 +163,22 @@ bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item)
     int height = lpDIS->rcItem.bottom - y;
     int wBmp   = bitmap->GetWidth();
     int hBmp   = bitmap->GetHeight();
-    int x1     = x + (width - wBmp) / 2;
-    int y1     = y + (height - hBmp) / 2;
+
+       int x1,y1;
+       
+    if(m_windowStyle & wxBU_LEFT)
+        x1 = x + (FOCUS_MARGIN+1);
+    else if(m_windowStyle & wxBU_RIGHT)
+        x1 = x + (width - wBmp) - (FOCUS_MARGIN+1);
+    else
+        x1 = x + (width - wBmp) / 2;
+
+    if(m_windowStyle & wxBU_TOP)
+        y1 = y + (FOCUS_MARGIN+1);
+    else if(m_windowStyle & wxBU_BOTTOM)
+        y1 = y + (height - hBmp) - (FOCUS_MARGIN+1);
+    else
+        y1 = y + (height - hBmp) / 2;
 
     if ( isSelected && autoDraw )
     {
@@ -166,7 +199,7 @@ bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item)
     wxDC dst;
     dst.SetHDC((WXHDC) hDC, FALSE);
     dst.DrawBitmap(*bitmap, x1, y1, TRUE);
-    
+
     // draw focus / disabled state, if auto-drawing
     if ( (state & ODS_DISABLED) && autoDraw )
     {
@@ -308,9 +341,6 @@ void wxBitmapButton::DrawFace( WXHDC dc, int left, int top, int right, int botto
 #endif // defined(__WIN95__)
 
 
-// VZ: should be at the very least less than wxDEFAULT_BUTTON_MARGIN
-#define FOCUS_MARGIN 3
-
 void wxBitmapButton::DrawButtonFocus( WXHDC dc, int left, int top, int right, int bottom, bool sel )
 {
     RECT rect;
@@ -325,6 +355,7 @@ void wxBitmapButton::DrawButtonFocus( WXHDC dc, int left, int top, int right, in
     if ( sel )
         OffsetRect( &rect, 1, 1 );
 */
+       (void)sel;
     DrawFocusRect( (HDC) dc, &rect );
 }