X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/837e57436a89516a5fa9f478f401e06bd872c17c..c94ad3c365a7a2b12346258f3d6b26432f36fd8d:/src/msw/statbox.cpp diff --git a/src/msw/statbox.cpp b/src/msw/statbox.cpp index 6ca6074e54..32de3fc979 100644 --- a/src/msw/statbox.cpp +++ b/src/msw/statbox.cpp @@ -99,50 +99,33 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, return TRUE; } -void wxStaticBox::SetLabel(const wxString& label) +wxSize wxStaticBox::DoGetBestSize() { - SetWindowText((HWND)m_hWnd, (const wxChar *)label); -} - -void wxStaticBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) -{ - int currentX, currentY; - GetPosition(¤tX, ¤tY); - - int x1 = x; - int y1 = y; - int w1 = width; - int h1 = height; - - if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - x1 = currentX; - if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - y1 = currentY; - - AdjustForParentClientOrigin(x1, y1, sizeFlags); + int cx, cy; + wxGetCharSize(GetHWND(), &cx, &cy, &GetFont()); - // If we're prepared to use the existing size, then... - if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO)) - { - GetSize(&w1, &h1); - } + int wBox; + GetTextExtent(wxGetWindowText(m_hWnd), &wBox, &cy); - int current_width; + wBox += 3*cx; + int hBox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy); - int cx; - int cy; - int cyf; + return wxSize(wBox, hBox); +} - wxGetCharSize(GetHWND(), &cx, &cy, & this->GetFont()); +void wxStaticBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) +{ + wxControl::DoSetSize(x, y, width, height, sizeFlags); - GetTextExtent(wxGetWindowText(m_hWnd), ¤t_width, &cyf, - NULL,NULL, & this->GetFont()); - if ( w1 < 0 ) - w1 = current_width + 3*cx; - if ( h1 < 0 ) - h1 = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cyf); + return; - MoveWindow((HWND)m_hWnd, x1, y1, w1, h1, TRUE); + // the static box should always be on the bottom of the Z-order, otherwise + // it may hide controls which are positioned inside it + if ( !::SetWindowPos(GetHwnd(), HWND_TOP, 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE) ) + { + wxLogLastError(_T("SetWindowPos")); + } } WXHBRUSH wxStaticBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, @@ -191,7 +174,7 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event) // Alternatively, just make sure that wxStaticBox is always at the back! There are probably // few other circumstances where it matters about child clipping. But what about painting onto // to panel, inside a groupbox? Doesn't appear, because the box wipes it out. - wxWindow *parent = GetParent(); + wxWindow *parent = 0; //GetParent(); if ( parent && parent->GetHWND() && (::GetWindowLong((HWND) parent->GetHWND(), GWL_STYLE) & WS_CLIPCHILDREN) ) { // TODO: May in fact need to generate a paint event for inside this @@ -202,7 +185,7 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event) RECT rect; - ::GetClientRect((HWND) GetHWND(), &rect); + ::GetClientRect(GetHwnd(), &rect); ::FillRect ((HDC) event.GetDC()->GetHDC(), &rect, hBrush); ::DeleteObject(hBrush); ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode); @@ -215,7 +198,7 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event) long wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { - if (nMsg == WM_NCHITTEST) + if ( nMsg == WM_NCHITTEST) { int xPos = LOWORD(lParam); // horizontal position of cursor int yPos = HIWORD(lParam); // vertical position of cursor