X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/24eb81cbcf23cabf7f9aa00685d37bbae33f6163..10ef30eb534117ae854c9d099101c862fe96bcb0:/src/os2/control.cpp diff --git a/src/os2/control.cpp b/src/os2/control.cpp index 0d6acde226..61fd7206cf 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" @@ -73,35 +74,25 @@ wxControl::~wxControl() } bool wxControl::OS2CreateControl( - wxWindow* pParent -, wxWindowID vId + const wxChar* zClassname +, const wxString& rsLabel , 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; + WXDWORD dwExstyle; + WXDWORD dwStyle = OS2GetStyle( lStyle + ,&dwExstyle + ); + + return OS2CreateControl( zClassname + ,dwStyle + ,rPos + ,rSize + ,rsLabel + ,dwExstyle + ); } // end of wxControl::OS2CreateControl bool wxControl::OS2CreateControl( @@ -113,43 +104,61 @@ bool wxControl::OS2CreateControl( , WXDWORD dwExstyle ) { + bool bWant3D = FALSE; + 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 // if (dwExstyle == (WXDWORD)-1) { - dwExstyle = GetExStyle(dwStyle); + dwExstyle = Determine3DEffects(WS_EX_CLIENTEDGE, &bWant3D); } + // + // All controls should have these styles (wxWindows creates all controls + // visible by default) + // + dwStyle |= WS_VISIBLE; - if ( !m_hWnd ) - { -#ifdef __WXDEBUG__ - wxLogError(wxT("Failed to create a control of class '%s'"), zClassname); -#endif // DEBUG + wxWindow* pParent = GetParent(); + PSZ zClass; + if (!pParent) return FALSE; - } - - PSZ zClass; 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; - 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 + + 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__ + wxLogError(wxT("Failed to create a control of class '%s'"), zClassname); +#endif // DEBUG + + return FALSE; + } // // Subclass again for purposes of dialog editing mode // @@ -159,6 +168,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 @@ -222,17 +233,21 @@ void wxControl::OnEraseBackground( ::WinFillRect(hPS, &vRect, GetBackgroundColour().GetPixel()); } // end of wxControl::OnEraseBackground -WXDWORD wxControl::GetExStyle( - WXDWORD& rStyle +WXDWORD wxControl::OS2GetStyle( + long lStyle +, WXDWORD* pdwExstyle ) const { - // - // Meaningless under OS/2, just return what was sent - // - WXDWORD exStyle = rStyle; + long dwStyle = wxWindow::OS2GetStyle( lStyle + ,pdwExstyle + ); - return exStyle; -} // end of wxControl::GetExStyle + if (AcceptsFocus()) + { + dwStyle |= WS_TABSTOP; + } + return dwStyle; +} // end of wxControl::OS2GetStyle // --------------------------------------------------------------------------- // global functions