X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c9cb56f7f2fb75bce8722f81337253f5649325b9..91b4bd63177025704dd39679a2a7c4198eeb7909:/src/os2/control.cpp?ds=sidebyside diff --git a/src/os2/control.cpp b/src/os2/control.cpp index f50e813f90..f9f19112b9 100644 --- a/src/os2/control.cpp +++ b/src/os2/control.cpp @@ -20,6 +20,7 @@ #include "wx/event.h" #include "wx/app.h" #include "wx/dcclient.h" +#include "wx/scrolwin.h" #endif #include "wx/os2/private.h" #include "wx/control.h" @@ -33,8 +34,6 @@ END_EVENT_TABLE() // Item members wxControl::wxControl() { - m_backgroundColour = *wxWHITE; - m_foregroundColour = *wxBLACK; #if WXWIN_COMPATIBILITY m_callback = 0; @@ -74,6 +73,38 @@ wxControl::~wxControl() m_isBeingDeleted = TRUE; } +bool wxControl::OS2CreateControl( + wxWindow* pParent +, wxWindowID vId +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle +#if wxUSE_VALIDATORS +, const wxValidator& rValidator +#endif +, const wxString& rsName +) +{ + // + // Even if it's possible to create controls without parents in some port, + // it should surely be discouraged because it doesn't work at all under + // Windows + // + if (!CreateBase( pParent + ,vId + ,rPos + ,rSize + ,lStyle +#if wxUSE_VALIDATORS + ,rValidator +#endif + ,rsName + )) + return FALSE; + pParent->AddChild(this); + return TRUE; +} // end of wxControl::OS2CreateControl + bool wxControl::OS2CreateControl( const wxChar* zClassname , WXDWORD dwStyle @@ -83,6 +114,10 @@ bool wxControl::OS2CreateControl( , WXDWORD dwExstyle ) { + int nX = rPos.x == -1 ? 0 : rPos.x; + int nY = rPos.y == -1 ? 0 : rPos.y; + int nW = rSize.x == -1 ? 0 : rSize.x; + int nH = rSize.y == -1 ? 0 : rSize.y; // // Doesn't do anything at all under OS/2 // @@ -91,6 +126,44 @@ bool wxControl::OS2CreateControl( dwExstyle = GetExStyle(dwStyle); } + wxWindow* pParent = GetParent(); + PSZ zClass; + + if (!pParent) + return FALSE; + + if ((strcmp(zClassname, "COMBOBOX")) == 0) + zClass = WC_COMBOBOX; + else if ((strcmp(zClassname, "STATIC")) == 0) + zClass = WC_STATIC; + else if ((strcmp(zClassname, "BUTTON")) == 0) + zClass = WC_BUTTON; + dwStyle |= WS_VISIBLE; + + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + dwStyle |= WS_CLIPSIBLINGS; + + m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle + ,(PSZ)zClass // Window class + ,(PSZ)rsLabel.c_str() // Initial Text + ,(ULONG)dwStyle // Style flags + ,(LONG)0 // X pos of origin + ,(LONG)0 // Y pos of origin + ,(LONG)0 // control width + ,(LONG)0 // control height + ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent + ,HWND_TOP // initial z position + ,(ULONG)GetId() // Window identifier + ,NULL // no control data + ,NULL // no Presentation parameters + ); + if ( !m_hWnd ) { #ifdef __WXDEBUG__ @@ -99,22 +172,6 @@ bool wxControl::OS2CreateControl( return FALSE; } - dwStyle |= WS_VISIBLE; - m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(GetParent()) // Parent window handle - ,(PSZ)zClassname // Window class - ,(PSZ)rsLabel.c_str() // Initial Text - ,(ULONG)dwStyle // Style flags - ,(LONG)rPos.x // X pos of origin - ,(LONG)rPos.y // Y pos of origin - ,(LONG)rSize.x // control width - ,(LONG)rSize.y // control height - ,(HWND)GetHwndOf(GetParent()) // owner window handle (same as parent - ,HWND_TOP // initial z position - ,(ULONG)GetId() // Window identifier - ,NULL // no control data - ,NULL // no Presentation parameters - ); - // // Subclass again for purposes of dialog editing mode // @@ -124,6 +181,8 @@ bool wxControl::OS2CreateControl( // Controls use the same font and colours as their parent dialog by default // InheritAttributes(); + if (nW == 0 || nH == 0) + SetBestSize(rSize); return TRUE; } // end of wxControl::OS2CreateControl