X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/017dc06b502c041c112a3948e6c5f65000a86d94..eef432913f750a7467cd71b27c1fbfd34a61f256:/src/msw/statbox.cpp diff --git a/src/msw/statbox.cpp b/src/msw/statbox.cpp index 784d07481d..6272f6396e 100644 --- a/src/msw/statbox.cpp +++ b/src/msw/statbox.cpp @@ -33,6 +33,7 @@ #include "wx/dcclient.h" #include "wx/dcmemory.h" #include "wx/image.h" + #include "wx/sizer.h" #endif #include "wx/notebook.h" @@ -118,6 +119,9 @@ WXDWORD wxStaticBox::MSWGetStyle(long style, WXDWORD *exstyle) const wxSize wxStaticBox::DoGetBestSize() const { + wxSize best; + + // Calculate the size needed by the label int cx, cy; wxGetCharSize(GetHWND(), &cx, &cy, GetFont()); @@ -127,8 +131,19 @@ wxSize wxStaticBox::DoGetBestSize() const wBox += 3*cx; int hBox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy); - wxSize best(wBox, hBox); - CacheBestSize(best); + // If there is a sizer then the base best size is the sizer's minimum + if (GetSizer() != NULL) + { + wxSize cm(GetSizer()->CalcMin()); + best = ClientToWindowSize(cm); + // adjust for a long label if needed + best.x = wxMax(best.x, wBox); + } + // otherwise the best size falls back to the label size + else + { + best = wxSize(wBox, hBox); + } return best; } @@ -528,26 +543,4 @@ void wxStaticBox::OnPaint(wxPaintEvent& WXUNUSED(event)) #endif // !__WXWINCE__ - -wxPoint wxStaticBox::GetClientAreaOrigin() const -{ - // See: http://msdn.microsoft.com/en-us/library/aa511279.aspx - wxPoint pt = ConvertDialogToPixels(wxPoint(6,11)); - return pt; -} - - -void wxStaticBox::DoGetClientSize(int *width, int *height) const -{ - // See: http://msdn.microsoft.com/en-us/library/aa511279.aspx - wxPoint lr = ConvertDialogToPixels(wxPoint(6,7)); - wxPoint ul = GetClientAreaOrigin(); - wxSize sz = GetSize(); - - if (width) - *width = sz.x - ul.x - lr.x; - if (height) - *height = sz.y - ul.y - lr.x; -} - #endif // wxUSE_STATBOX