X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/409c9842c71df526bcfbf1cf5ce80067b09d4d97..b58a1455e15477cac9d335b5f7a2c3fc3111b342:/src/os2/statbox.cpp diff --git a/src/os2/statbox.cpp b/src/os2/statbox.cpp index c88b00c999..571107c39b 100644 --- a/src/os2/statbox.cpp +++ b/src/os2/statbox.cpp @@ -22,176 +22,114 @@ #include "wx/statbox.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxStaticBox, wxControl) -BEGIN_EVENT_TABLE(wxStaticBox, wxControl) - EVT_ERASE_BACKGROUND(wxStaticBox::OnEraseBackground) -END_EVENT_TABLE() - -#endif - -/* - * Group box - */ - -bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, - const wxString& label, - const wxPoint& pos, - const wxSize& size, - long style, - const wxString& name) +bool wxStaticBox::Create( + wxWindow* pParent +, wxWindowID vId +, const wxString& rsLabel +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle +, const wxString& rsName +) { - SetName(name); - - if (parent) parent->AddChild(this); - - SetBackgroundColour(parent->GetBackgroundColour()) ; - SetForegroundColour(parent->GetForegroundColour()) ; - - if ( id == -1 ) - m_windowId = (int)NewControlId(); - else - m_windowId = id; - - int x = pos.x; - int y = pos.y; - int width = size.x; - int height = size.y; - - m_windowStyle = style; - -// TODO: -/* - long msStyle = BS_GROUPBOX | WS_CHILD | WS_VISIBLE ; // GROUP_FLAGS; - - bool want3D; - WXDWORD exStyle = Determine3DEffects(0, &want3D) ; - - HWND wx_button = - CreateWindowEx(exStyle, wxT("BUTTON"), (const wxChar *)label, msStyle, - 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId, - wxGetInstance(), NULL); -#if wxUSE_CTL3D - if (want3D) - { - Ctl3dSubclassCtl(wx_button); - m_useCtl3D = TRUE; - } + if(!CreateControl( pParent + ,vId + ,rPos + ,rSize + ,lStyle +#if wxUSE_VALIDATORS + ,wxDefaultValidator #endif - - m_hWnd = (WXHWND)wx_button; - - // Subclass again for purposes of dialog editing mode - SubclassWin(GetHWND()); - - SetFont(parent->GetFont()); - - SetSize(x, y, width, height); - ShowWindow(wx_button, SW_SHOW); -*/ - return FALSE; -} - -wxSize wxStaticBox::DoGetBestSize() -{ - int cx, cy; - wxGetCharSize(GetHWND(), &cx, &cy, &GetFont()); - - int wBox; - GetTextExtent(wxGetWindowText(m_hWnd), &wBox, &cy); - - wBox += 3*cx; - int hBox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy); - - return wxSize(wBox, hBox); -} - -WXHBRUSH wxStaticBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, - WXUINT message, - WXWPARAM wParam, - WXLPARAM lParam) -{ - // TODO: -/* - if (GetParent()->GetTransparentBackground()) - SetBkMode((HDC) pDC, TRANSPARENT); - else - SetBkMode((HDC) pDC, OPAQUE); - - ::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue())); - ::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue())); - - wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID); - - // Note that this will be cleaned up in wxApp::OnIdle, if backgroundBrush - // has a zero usage count. -// backgroundBrush->RealizeResource(); - return (WXHBRUSH) backgroundBrush->GetResourceHandle(); -*/ - return (WXHBRUSH)0; -} - -// Shouldn't erase the whole window, since the static box must only paint its -// outline. -void wxStaticBox::OnEraseBackground(wxEraseEvent& event) -{ - // If we don't have this (call Default()), we don't paint the background properly. - // If we do have this, we seem to overwrite enclosed controls. - // Is it the WS_CLIPCHILDREN style that's causing the problems? - // Probably - without this style, the background of the window will show through, - // so the control doesn't have to paint it. The window background will always be - // painted before all other controls, therefore there are no problems with - // controls being hidden by the static box. - // So, if we could specify wxCLIP_CHILDREN in window, or not, we could optimise painting better. - // We would assume wxCLIP_CHILDREN in a frame and a scrolled window, but not in a panel. - // Is this too platform-specific?? What else can we do? Not a lot, since we have to pass - // this information from arbitrary wxWindow derivatives, and it depends on what you wish to - // do with the windows. - // 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(); -// TODO: -/* - if ( parent && parent->GetHWND() && (::GetWindowLong((HWND) parent->GetHWND(), GWL_STYLE) & WS_CLIPCHILDREN) ) + ,rsName + )) { - // TODO: May in fact need to generate a paint event for inside this - // control's rectangle, otherwise all controls are going to be clipped - - // ugh. - HBRUSH hBrush = ::CreateSolidBrush(PALETTERGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue())); - int mode = ::SetMapMode((HDC) event.GetDC()->GetHDC(), MM_TEXT); - - RECT rect; - - ::GetClientRect(GetHwnd(), &rect); - ::FillRect ((HDC) event.GetDC()->GetHDC(), &rect, hBrush); - ::DeleteObject(hBrush); - ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode); + return FALSE; } - else - { - event.Skip(); - } -*/ -} -MRESULT wxStaticBox::OS2WindowProc(HWND hwnd, WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) -{ - if ( nMsg == WM_NCHITTEST) - { - int xPos = LOWORD(lParam); // horizontal position of cursor - int yPos = HIWORD(lParam); // vertical position of cursor - -// ScreenToClient(&xPos, &yPos); + wxPoint vPos(0,0); + wxSize vSize(0,0); - // Make sure you can drag by the top of the groupbox, but let - // other (enclosed) controls get mouse events also - if (yPos < 10) - return (long)HTCLIENT; + if (!OS2CreateControl( "STATIC" + ,SS_GROUPBOX + ,vPos + ,vSize + ,rsLabel + )) + { + return FALSE; } - return wxControl::OS2WindowProc(hwnd, nMsg, wParam, lParam); -} + // + // To be transparent we should have the same colour as the parent as well + // + SetBackgroundColour(GetParent()->GetBackgroundColour()); + + wxColour vColour; + + vColour.Set(wxString("BLACK")); + + LONG lColor = (LONG)vColour.GetPixel(); + + ::WinSetPresParam( m_hWnd + ,PP_FOREGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); + lColor = (LONG)m_backgroundColour.GetPixel(); + + ::WinSetPresParam( m_hWnd + ,PP_BACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); + wxFont* pTextFont = new wxFont( 10 + ,wxMODERN + ,wxNORMAL + ,wxNORMAL + ); + SetFont(*pTextFont); + SetSize( rPos.x + ,rPos.y + ,rSize.x + ,rSize.y + ); + delete pTextFont; + return TRUE; +} // end of wxStaticBox::Create + +wxSize wxStaticBox::DoGetBestSize() const +{ + int nCx; + int nCy; + int wBox; + + wxGetCharSize( GetHWND() + ,&nCx + ,&nCy + ,(wxFont*)&GetFont() + ); + GetTextExtent( wxGetWindowText(m_hWnd) + ,&wBox + ,&nCy + ); + wBox += 3 * nCx; + + int hBox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy); + + return wxSize( wBox + ,hBox + ); +} // end of wxStaticBox::DoGetBestSize + +MRESULT wxStaticBox::OS2WindowProc( + WXUINT nMsg +, WXWPARAM wParam +, WXLPARAM lParam +) +{ + return wxControl::OS2WindowProc(nMsg, wParam, lParam); +} // end of wxStaticBox::OS2WindowProc