From 5d44b24ee63543390aa28e1eb4ff162da4264838 Mon Sep 17 00:00:00 2001
From: David Webster <Dave.Webster@bhmi.com>
Date: Mon, 7 Jan 2002 00:49:10 +0000
Subject: [PATCH] OS/2 scrolling support for controls

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13430 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 src/os2/button.cpp   |   9 +
 src/os2/checkbox.cpp | 291 ++++++++++++---------
 src/os2/choice.cpp   |   4 +-
 src/os2/combobox.cpp |   1 +
 src/os2/control.cpp  |  61 +++--
 src/os2/dialog.cpp   | 196 +++-----------
 src/os2/frame.cpp    | 605 +++++--------------------------------------
 src/os2/gauge.cpp    |   9 +-
 src/os2/listbox.cpp  |  32 +++
 src/os2/makefile.va  |   3 +
 src/os2/radiobox.cpp |  22 +-
 src/os2/radiobut.cpp |   9 +
 src/os2/slider.cpp   |  36 +++
 src/os2/spinbutt.cpp |   9 +
 src/os2/spinctrl.cpp |   9 +
 src/os2/stattext.cpp |   9 +
 src/os2/textctrl.cpp |  48 ++--
 src/os2/window.cpp   | 288 ++++++++++----------
 src/os2/wx23.def     | 193 ++++++++++----
 19 files changed, 769 insertions(+), 1065 deletions(-)

diff --git a/src/os2/button.cpp b/src/os2/button.cpp
index 3c1331876b..f77b45338a 100644
--- a/src/os2/button.cpp
+++ b/src/os2/button.cpp
@@ -70,6 +70,15 @@ bool wxButton::Create(
     //
     if (m_windowStyle & wxCLIP_SIBLINGS )
         lStyle |= WS_CLIPSIBLINGS;
+    //
+    // 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)))
+            lStyle |= WS_CLIPSIBLINGS;
+
     m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent)   // Parent handle
                                        ,WC_BUTTON            // A Button class window
                                        ,(PSZ)rsLabel.c_str() // Button text
diff --git a/src/os2/checkbox.cpp b/src/os2/checkbox.cpp
index 9f5c9663b8..0101e79a0c 100644
--- a/src/os2/checkbox.cpp
+++ b/src/os2/checkbox.cpp
@@ -34,52 +34,90 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox)
 // wxCheckBox
 // ----------------------------------------------------------------------------
 
-bool wxCheckBox::OS2Command(WXUINT WXUNUSED(param), WXWORD WXUNUSED(id))
+bool wxCheckBox::OS2Command(
+  WXUINT                            WXUNUSED(uParam)
+, WXWORD                            WXUNUSED(wId)
+)
 {
-    wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId);
-    event.SetInt(GetValue());
-    event.SetEventObject(this);
-    ProcessCommand(event);
+    wxCommandEvent                  rEvent( wxEVT_COMMAND_CHECKBOX_CLICKED
+                                           ,m_windowId
+                                          );
+    rEvent.SetInt(GetValue());
+    rEvent.SetEventObject(this);
+    ProcessCommand(rEvent);
     return TRUE;
-}
-
-// Single check box item
-bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
-           const wxPoint& pos,
-           const wxSize& size, long style,
+} // end of wxCheckBox::OS2Command
+
+bool wxCheckBox::Create(
+  wxWindow*                         pParent
+, wxWindowID                        vId
+, const wxString&                   rsLabel
+, const wxPoint&                    rPos
+, const wxSize&                     rSize
+, long                              lStyle
 #if wxUSE_VALIDATORS
-           const wxValidator& validator,
+, const wxValidator&                rValidator
 #endif
-           const wxString& name)
+, const wxString&                   rsName
+)
 {
-    SetName(name);
+    SetName(rsName);
 #if wxUSE_VALIDATORS
-    SetValidator(validator);
+    SetValidator(rValidator);
 #endif
-    if (parent) parent->AddChild(this);
+    if (pParent)
+        pParent->AddChild(this);
 
-    SetBackgroundColour(parent->GetBackgroundColour()) ;
-    SetForegroundColour(parent->GetForegroundColour()) ;
+    SetBackgroundColour(pParent->GetBackgroundColour());
+    SetForegroundColour(pParent->GetForegroundColour());
+    m_windowStyle = lStyle;
 
-    m_windowStyle = style;
+    wxString                        sLabel = rsLabel;
 
-    wxString Label = label;
-    if (Label == wxT(""))
-        Label = wxT(" "); // Apparently needed or checkbox won't show
+    if (sLabel == wxT(""))
+        sLabel = wxT(" "); // Apparently needed or checkbox won't show
 
-    if ( id == -1 )
+    if (vId == -1 )
         m_windowId = NewControlId();
     else
-        m_windowId = id;
-
-    int x = pos.x;
-    int y = pos.y;
-    int width = size.x;
-    int height = size.y;
-
-    // TODO: create checkbox
-
+        m_windowId = vId;
+
+    int                             nX      = rPos.x;
+    int                             nY      = rPos.y;
+    int                             nWidth  = rSize.x;
+    int                             nHeight = rSize.y;
+    long                            lSstyle = 0L;
+
+    lSstyle = BS_AUTOCHECKBOX |
+              WS_TABSTOP      |
+              WS_VISIBLE;
+    if (lStyle & wxCLIP_SIBLINGS )
+        lSstyle |= WS_CLIPSIBLINGS;
+
+    //
+    // 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)))
+            lSstyle |= WS_CLIPSIBLINGS;
+
+    m_hWnd = (WXHWND)::WinCreateWindow ( GetHwndOf(pParent)
+                                        ,WC_BUTTON
+                                        ,rsLabel.c_str()
+                                        ,lSstyle
+                                        ,0, 0, 0, 0
+                                        ,GetWinHwnd(pParent)
+                                        ,HWND_TOP
+                                        ,(HMENU)m_windowId
+                                        ,NULL
+                                        ,NULL
+                                       );
+
+    //
     // Subclass again for purposes of dialog editing mode
+    //
     SubclassWin(m_hWnd);
 
     LONG                            lColor = (LONG)m_backgroundColour.GetPixel();
@@ -90,45 +128,73 @@ bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
                       ,(PVOID)&lColor
                      );
 
-    SetFont(parent->GetFont());
-
-    SetSize(x, y, width, height);
+    SetFont(pParent->GetFont());
 
-    return FALSE;
-}
+    SetSize( nX
+            ,nY
+            ,nWidth
+            ,nHeight
+           );
+    return TRUE;
+} // end of wxCheckBox::Create
 
-void wxCheckBox::SetLabel(const wxString& label)
+void wxCheckBox::SetLabel(
+  const wxString&                   rsLabel
+)
 {
-    // TODO
-}
+    ::WinSetWindowText(GetHwnd(), rsLabel.c_str());
+} // end of wxCheckBox::SetLabel
 
 wxSize wxCheckBox::DoGetBestSize() const
 {
-    int wCheckbox, hCheckbox;
+    static int                      nCheckSize = 0;
+
+    if (!nCheckSize)
+    {
+        wxScreenDC                  vDc;
+
+        vDc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+
+        //
+        // The height of a standard button in the dialog units is 8,
+        // translate this to pixels (as one dialog unit is precisely equal to
+        // 8 character heights, it's just the char height)
+        //
+        nCheckSize = vDc.GetCharHeight();
+    }
 
-    wxString str = wxGetWindowText(GetHWND());
+    int                             nWidthCheckbox;
+    int                             nHeightCheckbox;
+    wxString                        sStr = wxGetWindowText(GetHWND());
 
-    if ( !str.IsEmpty() )
+    if (!sStr.IsEmpty())
     {
-        GetTextExtent(str, &wCheckbox, &hCheckbox);
-        wCheckbox += RADIO_SIZE;
+        GetTextExtent( sStr
+                      ,&nWidthCheckbox
+                      ,&nHeightCheckbox
+                     );
+        nWidthCheckbox += nCheckSize + GetCharWidth();
 
-        if ( hCheckbox < RADIO_SIZE )
-            hCheckbox = RADIO_SIZE;
+        if (nHeightCheckbox < nCheckSize)
+            nHeightCheckbox = nCheckSize;
     }
     else
     {
-        wCheckbox = RADIO_SIZE;
-        hCheckbox = RADIO_SIZE;
+        nWidthCheckbox  = nCheckSize;
+        nHeightCheckbox = nCheckSize;
     }
 
-    return wxSize(wCheckbox, hCheckbox);
-}
+    return wxSize( nWidthCheckbox
+                  ,nHeightCheckbox
+                 );
+} // end of wxCheckBox::DoGetBestSize
 
-void wxCheckBox::SetValue(bool val)
+void wxCheckBox::SetValue(
+  bool                              bValue
+)
 {
-    // TODO
-}
+    ::WinSendMsg(GetHwnd(), BM_SETCHECK, (MPARAM)bValue, 0);
+} // end of wxCheckBox::SetValue
 
 #ifndef BST_CHECKED
 #define BST_CHECKED 0x0001
@@ -136,101 +202,82 @@ void wxCheckBox::SetValue(bool val)
 
 bool wxCheckBox::GetValue() const
 {
-    // TODO
-    return FALSE;
-}
+    return((LONGFROMMR(::WinSendMsg(GetHwnd(), BM_QUERYCHECK, (MPARAM)0, (MPARAM)0)) == 1L));
+} // end of wxCheckBox::GetValue
 
-WXHBRUSH wxCheckBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
-                                WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
+void wxCheckBox::Command (
+  wxCommandEvent&                  rEvent
+)
 {
-  // TODO:
-  /*
-#if wxUSE_CTL3D
-  if ( m_useCtl3D )
-  {
-    HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam);
-
-      return (WXHBRUSH) hbrush;
-  }
-#endif
-
-  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();
-}
-
-void wxCheckBox::Command (wxCommandEvent & event)
-{
-    SetValue ((event.GetInt() != 0));
-    ProcessCommand (event);
-}
+    SetValue((rEvent.GetInt() != 0));
+    ProcessCommand(rEvent);
+} // end of wxCheckBox:: Command
 
 // ----------------------------------------------------------------------------
 // wxBitmapCheckBox
 // ----------------------------------------------------------------------------
 
-bool wxBitmapCheckBox::Create(wxWindow *parent, wxWindowID id, const wxBitmap *label,
-           const wxPoint& pos,
-           const wxSize& size, long style,
+bool wxBitmapCheckBox::Create(
+  wxWindow*                         pParent
+, wxWindowID                        vId
+, const wxBitmap*                   pLabel
+, const wxPoint&                    rPos
+, const wxSize&                     rSize
+, long                              lStyle
 #if wxUSE_VALIDATORS
-           const wxValidator& validator,
+, const wxValidator&                rValidator
 #endif
-           const wxString& name)
+, const wxString&                   rsName
+)
 {
-    SetName(name);
+    SetName(rsName);
 #if wxUSE_VALIDATORS
-    SetValidator(validator);
+    SetValidator(rValidator);
 #endif
-    if (parent) parent->AddChild(this);
+    if (pParent)
+        pParent->AddChild(this);
 
-    SetBackgroundColour(parent->GetBackgroundColour()) ;
-    SetForegroundColour(parent->GetForegroundColour()) ;
-    m_windowStyle = style;
+    SetBackgroundColour(pParent->GetBackgroundColour()) ;
+    SetForegroundColour(pParent->GetForegroundColour()) ;
+    m_windowStyle = lStyle;
 
-    if ( id == -1 )
+    if (vId == -1)
         m_windowId = NewControlId();
     else
-        m_windowId = id;
+        m_windowId = vId;
 
-    int x = pos.x;
-    int y = pos.y;
-    int width = size.x;
-    int height = size.y;
+    int                             nX      = rPos.x;
+    int                             nY      = rPos.y;
+    int                             nWidth  = rSize.x;
+    int                             nHeight = rSize.y;
 
-    checkWidth = -1 ;
-    checkHeight = -1 ;
+    m_nCheckWidth = -1 ;
+    m_nCheckHeight = -1 ;
 //    long msStyle = CHECK_FLAGS;
 
-    HWND wx_button = 0; // TODO: Create the bitmap checkbox
+    HWND hButton = 0; // TODO: Create the bitmap checkbox
 
-    m_hWnd = (WXHWND)wx_button;
+    m_hWnd = (WXHWND)hButton;
 
+    //
     // Subclass again for purposes of dialog editing mode
-    SubclassWin((WXHWND)wx_button);
-
-    SetSize(x, y, width, height);
+    //
+    SubclassWin((WXHWND)hButton);
 
-// TODO:    ShowWindow(wx_button, SW_SHOW);
+    SetSize( nX
+            ,nY
+            ,nWidth
+            ,nHeight
+           );
 
+    ::WinShowWindow(hButton, TRUE);
     return TRUE;
-}
+} // end of wxBitmapCheckBox::Create
 
-void wxBitmapCheckBox::SetLabel(const wxBitmap& bitmap)
+void wxBitmapCheckBox::SetLabel(
+  const wxBitmap&                   rBitmap
+)
 {
     wxFAIL_MSG(wxT("not implemented"));
-}
+}  // end of wxBitmapCheckBox::SetLabel
 
diff --git a/src/os2/choice.cpp b/src/os2/choice.cpp
index 0597080b72..079295ab77 100644
--- a/src/os2/choice.cpp
+++ b/src/os2/choice.cpp
@@ -50,8 +50,8 @@ bool wxChoice::Create(
                          ))
         return FALSE;
     lSstyle = CBS_DROPDOWNLIST |
-             WS_TABSTOP       |
-             WS_VISIBLE;
+              WS_TABSTOP       |
+              WS_VISIBLE;
 
     if (lStyle & wxCLIP_SIBLINGS )
         lSstyle |= WS_CLIPSIBLINGS;
diff --git a/src/os2/combobox.cpp b/src/os2/combobox.cpp
index e062a2f24a..bf7feb6860 100644
--- a/src/os2/combobox.cpp
+++ b/src/os2/combobox.cpp
@@ -163,6 +163,7 @@ bool wxComboBox::Create(
     gfnWndprocEdit = (WXFARPROC)::WinSubclassWindow( (HWND)GetHwnd()
                                                     ,(PFNWP)wxComboEditWndProc
                                                    );
+    ::WinSetWindowULong(GetHwnd(), QWL_USER, (ULONG)this);
     return TRUE;
 } // end of wxComboBox::Create
 
diff --git a/src/os2/control.cpp b/src/os2/control.cpp
index acf4cecf2c..f1168950f8 100644
--- a/src/os2/control.cpp
+++ b/src/os2/control.cpp
@@ -113,6 +113,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
     //
@@ -121,37 +125,50 @@ bool wxControl::OS2CreateControl(
         dwExstyle = GetExStyle(dwStyle);
     }
 
-    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;
     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)0                      // X pos of origin
-                                       ,(LONG)0                      // Y pos of origin
-                                       ,(LONG)0                      // control width
-                                       ,(LONG)0                      // 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
+
+    //
+    // 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__
+        wxLogError(wxT("Failed to create a control of class '%s'"), zClassname);
+#endif // DEBUG
+
+        return FALSE;
+    }
     //
     // Subclass again for purposes of dialog editing mode
     //
@@ -161,6 +178,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
 
diff --git a/src/os2/dialog.cpp b/src/os2/dialog.cpp
index aff9dac015..c73062da3c 100644
--- a/src/os2/dialog.cpp
+++ b/src/os2/dialog.cpp
@@ -31,23 +31,18 @@
 #define wxDIALOG_DEFAULT_WIDTH 500
 #define wxDIALOG_DEFAULT_HEIGHT 500
 
-// Lists to keep track of windows, so we can disable/enable them
-// for modal dialogs
 wxWindowList wxModalDialogs;
-wxWindowList wxModelessWindows;  // Frames and modeless dialogs
-extern wxList WXDLLEXPORT wxPendingDelete;
 
-   IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxPanel)
+IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow)
 
-   BEGIN_EVENT_TABLE(wxDialog, wxPanel)
-      EVT_SIZE(wxDialog::OnSize)
-      EVT_BUTTON(wxID_OK, wxDialog::OnOK)
-      EVT_BUTTON(wxID_APPLY, wxDialog::OnApply)
-      EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel)
-      EVT_CHAR_HOOK(wxDialog::OnCharHook)
-      EVT_SYS_COLOUR_CHANGED(wxDialog::OnSysColourChanged)
-      EVT_CLOSE(wxDialog::OnCloseWindow)
-   END_EVENT_TABLE()
+BEGIN_EVENT_TABLE(wxDialog, wxTopLevelWindow)
+    EVT_BUTTON(wxID_OK, wxDialog::OnOK)
+    EVT_BUTTON(wxID_APPLY, wxDialog::OnApply)
+    EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel)
+    EVT_CHAR_HOOK(wxDialog::OnCharHook)
+    EVT_SYS_COLOUR_CHANGED(wxDialog::OnSysColourChanged)
+    EVT_CLOSE(wxDialog::OnCloseWindow)
+END_EVENT_TABLE()
 
 void wxDialog::Init()
 {
@@ -76,64 +71,27 @@ bool wxDialog::Create(
     HWND                            hWnd;
 
     Init();
-    m_pOldFocus = (wxWindow*)FindFocus();
-    SetName(rsName);
-    wxTopLevelWindows.Append(this);
-    if (pParent)
-        pParent->AddChild(this);
-    if (vId == -1)
-        m_windowId = NewControlId();
-    else
-        m_windowId = vId;
-    if (lX < 0)
-        lX = wxDIALOG_DEFAULT_X;
-    if (lY < 0)
-        lY = wxDIALOG_DEFAULT_Y;
-    m_windowStyle = lStyle;
-    if (lWidth < 0)
-        lWidth = wxDIALOG_DEFAULT_WIDTH;
-    if (lHeight < 0)
-        lHeight = wxDIALOG_DEFAULT_HEIGHT;
+    SetExtraStyle(GetExtraStyle() | wxTOPLEVEL_EX_DIALOG);
 
     //
-    // All dialogs should really have this style
+    // Save focus before doing anything which can potentially change it
     //
-    m_windowStyle |= wxTAB_TRAVERSAL;
+    m_pOldFocus = FindFocus();
 
     //
-    // Allows creation of dialogs with & without captions under MSWindows,
-    // resizeable or not (but a resizeable dialog always has caption -
-    // otherwise it would look too strange)
+    // All dialogs should really have this style
     //
-    if (lStyle & wxRESIZE_BORDER )
-        zDlg = "wxResizeableDialog";
-    else if (lStyle & wxCAPTION )
-        zDlg = "wxCaptionDialog";
-    else
-        zDlg = "wxNoCaptionDialog";
-    OS2Create( GetWinHwnd(pParent)
-              ,NULL
-              ,rsTitle.c_str()
-              ,0L
-              ,lX
-              ,lY
-              ,lWidth
-              ,lHeight
-              ,GetWinHwnd(pParent)
-              ,HWND_TOP
-              ,(long)m_windowId
-              ,NULL
-              ,NULL
-             );
-    hWnd = (HWND)GetHWND();
-    if (!hWnd)
-    {
+    lStyle |= wxTAB_TRAVERSAL;
+
+    if (!wxTopLevelWindow::Create( pParent
+                                  ,vId
+                                  ,rsTitle
+                                  ,rPos
+                                  ,rSize
+                                  ,lStyle
+                                  ,rsName
+                                 ))
         return FALSE;
-    }
-    SubclassWin(GetHWND());
-    ::WinSetWindowText( hWnd
-                       ,(PSZ)rsTitle.c_str()
-                      );
     SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
     return TRUE;
 } // end of wxDialog::Create
@@ -143,35 +101,21 @@ void wxDialog::SetModal(
 )
 {
     if (bFlag)
+    {
         m_windowStyle |= wxDIALOG_MODAL ;
-    else if ( m_windowStyle & wxDIALOG_MODAL )
-        m_windowStyle -= wxDIALOG_MODAL ;
-
-      wxModelessWindows.DeleteObject(this);
-      if (!bFlag)
-          wxModelessWindows.Append(this);
+        wxModelessWindows.DeleteObject(this);
+    }
+    else
+    {
+        m_windowStyle &= ~wxDIALOG_MODAL ;
+        wxModelessWindows.Append(this);
+    }
 } // end of wxDialog::SetModal
 
 wxDialog::~wxDialog()
 {
     m_isBeingDeleted = TRUE;
-    wxTopLevelWindows.DeleteObject(this);
     Show(FALSE);
-    if (!IsModal())
-        wxModelessWindows.DeleteObject(this);
-
-    //
-    // If this is the last top-level window, exit.
-    //
-    if (wxTheApp && (wxTopLevelWindows.Number() == 0))
-    {
-        wxTheApp->SetTopWindow(NULL);
-
-        if (wxTheApp->GetExitOnFrameDelete())
-        {
-            ::WinPostMsg(GetHwnd(), WM_QUIT, 0, 0);
-        }
-    }
 } // end of wxDialog::~wxDialog
 
 //
@@ -208,64 +152,9 @@ void wxDialog::OnCharHook(
     rEvent.Skip();
 }
 
-void wxDialog::Iconize(
-  bool                              WXUNUSED(bIconize)
-)
-{
-} // end of wxDialog::Iconize
-
-bool wxDialog::IsIconized() const
-{
-    return FALSE;
-} // end of wxDialog::IsIconized
-
-void wxDialog::DoSetClientSize(
-  int                               nWidth
-, int                               nHeight
-)
-{
-    HWND                            hWnd = (HWND) GetHWND();
-    RECTL                           vRect;
-    RECTL                           vRect2;
-
-    ::WinQueryWindowRect(hWnd, &vRect);
-    ::WinQueryWindowRect(hWnd, &vRect2);
-
-    LONG                            lActualWidth = vRect2.xRight - vRect2.xLeft - vRect.xRight + nWidth;
-    LONG                            lActualHeight = vRect2.yTop + vRect2.yTop - vRect.yTop + nHeight;
-
-    ::WinSetWindowPos( GetHwnd()
-                      ,HWND_TOP
-                      ,(LONG)vRect2.xLeft
-                      ,(LONG)vRect2.yTop
-                      ,(LONG)lActualWidth
-                      ,(LONG)lActualHeight
-                      ,SWP_SIZE | SWP_MOVE
-                     );
-
-    wxSizeEvent                     vEvent( wxSize( lActualWidth
-                                                   ,lActualHeight
-                                                  )
-                                           ,m_windowId
-                                          );
-
-    vEvent.SetEventObject( this );
-    GetEventHandler()->ProcessEvent(vEvent);
-} // end of wxDialog::DoSetClientSize
-
-void wxDialog::DoGetPosition(
-  int*                              pnX
-, int*                              pnY
-) const
-{
-    RECTL                           vRect;
-
-    ::WinQueryWindowRect(GetHwnd(), &vRect);
-    if (pnX)
-        *pnX = vRect.xLeft;
-    if (pnY)
-        *pnY = vRect.yBottom; // OS/2's bottom is windows' top???
-} // end of wxDialog::DoGetPosition
+// ----------------------------------------------------------------------------
+// showing the dialogs
+// ----------------------------------------------------------------------------
 
 bool wxDialog::IsModal() const
 {
@@ -407,7 +296,7 @@ bool wxDialog::Show(
             wxModalDialogs.DeleteObject(this);
         }
     }
-    return FALSE;
+    return TRUE;
 } // end of wxDialog::Show
 
 //
@@ -431,6 +320,10 @@ void wxDialog::EndModal(
     Show(FALSE);
 } // end of wxDialog::EndModal
 
+// ----------------------------------------------------------------------------
+// wxWin event handlers
+// ----------------------------------------------------------------------------
+
 void wxDialog::OnApply(
   wxCommandEvent&                   rEvent
 )
@@ -495,17 +388,6 @@ void wxDialog::OnCloseWindow(
     closing.DeleteObject(this);
 } // end of wxDialog::OnCloseWindow
 
-//
-// Destroy the window (delayed, if a managed window)
-//
-bool wxDialog::Destroy()
-{
-    wxCHECK_MSG( !wxPendingDelete.Member(this), FALSE,
-                 _T("wxDialog destroyed twice") );
-    wxPendingDelete.Append(this);
-    return TRUE;
-} // end of wxDialog::Destroy
-
 void wxDialog::OnSysColourChanged(
   wxSysColourChangedEvent&          rEvent
 )
diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp
index bc13037ef5..261c01de4c 100644
--- a/src/os2/frame.cpp
+++ b/src/os2/frame.cpp
@@ -52,7 +52,7 @@
 
 extern wxWindowList wxModelessWindows;
 extern wxList WXDLLEXPORT wxPendingDelete;
-extern wxChar wxFrameClassName[];
+extern const wxChar* wxFrameClassName;
 
 #if wxUSE_MENUS_NATIVE
 extern wxMenu *wxCurrentPopupMenu;
@@ -96,39 +96,33 @@ IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
 
 void wxFrame::Init()
 {
-    m_bIconized = FALSE;
-
-#if wxUSE_TOOLTIPS
-    m_hWndToolTip = 0;
-#endif
-    // Data to save/restore when calling ShowFullScreen
-    m_lFsStyle           = 0L;
-    m_lFsOldWindowStyle  = 0L;
     m_nFsStatusBarFields = 0;
     m_nFsStatusBarHeight = 0;
     m_nFsToolBarHeight   = 0;
-    m_bFsIsMaximized     = FALSE;
+    m_hWndToolTip        = 0L;
     m_bWasMinimized      = FALSE;
-    m_bFsIsShowing       = FALSE;
-    m_bIsShown           = FALSE;
-    m_pWinLastFocused    = (wxWindow *)NULL;
+    m_pWinLastFocused    = NULL;
+
+
+    m_frameMenuBar   = NULL;
+    m_frameToolBar   = NULL;
+    m_frameStatusBar = NULL;
 
-    m_hFrame    = NULL;
-    m_hTitleBar = NULL;
-    m_hHScroll  = NULL;
-    m_hVScroll  = NULL;
+    m_hTitleBar = NULLHANDLE;
+    m_hHScroll  = NULLHANDLE;
+    m_hVScroll  = NULLHANDLE;
 
     //
     // Initialize SWP's
     //
-    memset(&m_vSwp, 0, sizeof(SWP));
-    memset(&m_vSwpClient, 0, sizeof(SWP));
     memset(&m_vSwpTitleBar, 0, sizeof(SWP));
     memset(&m_vSwpMenuBar, 0, sizeof(SWP));
     memset(&m_vSwpHScroll, 0, sizeof(SWP));
     memset(&m_vSwpVScroll, 0, sizeof(SWP));
     memset(&m_vSwpStatusBar, 0, sizeof(SWP));
     memset(&m_vSwpToolBar, 0, sizeof(SWP));
+    m_bIconized = FALSE;
+
 } // end of wxFrame::Init
 
 bool wxFrame::Create(
@@ -137,153 +131,30 @@ bool wxFrame::Create(
 , const wxString&                   rsTitle
 , const wxPoint&                    rPos
 , const wxSize&                     rSize
-, long                              lulStyle
+, long                              lStyle
 , const wxString&                   rsName
 )
 {
-    int                             nX      = rPos.x;
-    int                             nY      = rPos.y;
-    int                             nWidth  = rSize.x;
-    int                             nHeight = rSize.y;
-    bool                            bOk = FALSE;
-
-    SetName(rsName);
-    m_windowStyle    = lulStyle;
-    m_frameMenuBar   = NULL;
-#if wxUSE_TOOLBAR
-    m_frameToolBar   = NULL;
-#endif //wxUSE_TOOLBAR
-
-#if wxUSE_STATUSBAR
-    m_frameStatusBar = NULL;
-#endif //wxUSE_STATUSBAR
-
+    if (!wxTopLevelWindow::Create( pParent
+                                  ,vId
+                                  ,rsTitle
+                                  ,rPos
+                                  ,rSize
+                                  ,lStyle
+                                  ,rsName
+                                 ))
+        return FALSE;
     SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE));
-
-    if (vId > -1 )
-        m_windowId = vId;
-    else
-        m_windowId = (int)NewControlId();
-
-    if (pParent)
-        pParent->AddChild(this);
-
-    m_bIconized = FALSE;
-
-    if ((m_windowStyle & wxFRAME_FLOAT_ON_PARENT) == 0)
-        pParent = NULL;
-
-    bOk = OS2Create( m_windowId
-                    ,pParent
-                    ,wxFrameClassName
-                    ,this
-                    ,rsTitle
-                    ,nX
-                    ,nY
-                    ,nWidth
-                    ,nHeight
-                    ,lulStyle
-                   );
-    if (bOk)
-    {
-        if (!pParent)
-            wxTopLevelWindows.Append(this);
-        wxModelessWindows.Append(this);
-    }
-    return(bOk);
+    wxModelessWindows.Append(this);
+    return TRUE;
 } // end of wxFrame::Create
 
 wxFrame::~wxFrame()
 {
     m_isBeingDeleted = TRUE;
-
-    wxTopLevelWindows.DeleteObject(this);
-
     DeleteAllBars();
-
-    if (wxTheApp && (wxTopLevelWindows.Number() == 0))
-    {
-        wxTheApp->SetTopWindow(NULL);
-
-        if (wxTheApp->GetExitOnFrameDelete())
-        {
-            ::WinPostMsg(NULL, WM_QUIT, 0, 0);
-        }
-    }
-
-    wxModelessWindows.DeleteObject(this);
-
-    //
-    // For some reason, wxWindows can activate another task altogether
-    // when a frame is destroyed after a modal dialog has been invoked.
-    // Try to bring the parent to the top.
-    //
-    // MT:Only do this if this frame is currently the active window, else weird
-    // things start to happen.
-    //
-    if (wxGetActiveWindow() == this)
-    {
-        if (GetParent() && GetParent()->GetHWND())
-        {
-            ::WinSetWindowPos( (HWND) GetParent()->GetHWND()
-                              ,HWND_TOP
-                              ,0
-                              ,0
-                              ,0
-                              ,0
-                              ,SWP_ZORDER
-                             );
-        }
-    }
 } // end of wxFrame::~wxFrame
 
-//
-//  IF we have child controls in the Frame's client we need to alter
-//  the y position, because, OS/2 controls are positioned relative to
-//  wxWindows orgin (top left) not the OS/2 origin (bottom left)
-void wxFrame::AlterChildPos()
-{
-    //
-    // OS/2 is the only OS concerned about this
-    //
-    wxWindow*                               pChild = NULL;
-    wxControl*                              pCtrl = NULL;
-    RECTL                                   vRect;
-    SWP                                     vSwp;
-
-    ::WinQueryWindowRect(GetHwnd(), &vRect);
-    for (wxWindowList::Node* pNode = GetChildren().GetFirst();
-         pNode;
-         pNode = pNode->GetNext())
-    {
-        wxWindow*                   pChild = pNode->GetData();
-
-        ::WinQueryWindowPos(pChild->GetHWND(), &vSwp);
-        vSwp.y += (vRect.yTop - m_vSwpClient.cy);
-        if (pChild->IsKindOf(CLASSINFO(wxControl)))
-        {
-            pCtrl = wxDynamicCast(pChild, wxControl);
-            //
-            // Must deal with controls that have margins like ENTRYFIELD.  The SWP
-            // struct of such a control will have and origin offset from its intended
-            // position by the width of the margins.
-            //
-            vSwp.y -= pCtrl->GetYComp();
-            vSwp.x -= pCtrl->GetXComp();
-        }
-        ::WinSetWindowPos( pChild->GetHWND()
-                          ,HWND_TOP
-                          ,vSwp.x
-                          ,vSwp.y
-                          ,vSwp.cx
-                          ,vSwp.cy
-                          ,SWP_MOVE
-                         );
-        ::WinQueryWindowPos(pChild->GetHWND(), &vSwp);
-        pChild = NULL;
-    }
-} // end of wxFrame::AlterChildPos
-
 //
 // Get size *available for subwindows* i.e. excluding menu bar, toolbar etc.
 //
@@ -292,19 +163,15 @@ void wxFrame::DoGetClientSize(
 , int*                              pY
 ) const
 {
-    RECTL                           vRect;
-    ::WinQueryWindowRect(GetHwnd(), &vRect);
-
+    wxTopLevelWindow::DoGetClientSize( pX
+                                      ,pY
+                                     );
     //
     // No need to use statusbar code as in WIN32 as the FORMATFRAME
     // window procedure ensures PM knows about the new frame client
-    // size internally.  A ::WinQueryWindowRect is all that is needed!
+    // size internally.  A ::WinQueryWindowRect (that is called in
+    // wxWindow's GetClient size from above) is all that is needed!
     //
-
-    if (pX)
-        *pX = vRect.xRight - vRect.xLeft;
-    if (pY)
-        *pY = vRect.yTop - vRect.yBottom;
 } // end of wxFrame::DoGetClientSize
 
 //
@@ -316,214 +183,48 @@ void wxFrame::DoSetClientSize(
 , int                               nHeight
 )
 {
-    HWND                            hWnd = GetHwnd();
-    RECTL                           vRect;
-    RECTL                           vRect2;
-
-    ::WinQueryWindowRect(GetHwnd(), &vRect);
-    ::WinQueryWindowRect(GetHwnd(), &vRect2);
+    wxStatusBar*                    pStatusBar = GetStatusBar();
 
     //
-    // Find the difference between the entire window (title bar and all)
-    // and the client area; add this to the new client size to move the
-    // window.  Remember OS/2's backwards y coord system!
+    // Statusbars are not part of the OS/2 Client but parent frame
+    // so no statusbar consideration
     //
-    int                             nActualWidth = vRect2.xRight - vRect2.xLeft - vRect.xRight;
-    int                             nActualHeight = vRect2.yTop + vRect2.yTop - vRect.yTop;
-
-#if wxUSE_STATUSBAR
-    wxStatusBar*                    pStatusBar = GetStatusBar();
-
-    if (pStatusBar && pStatusBar->IsShown())
-    {
-        nActualHeight += pStatusBar->GetSize().y;
-    }
-
-#endif // wxUSE_STATUSBAR
-
-    wxPoint                         vPoint(GetClientAreaOrigin());
-
-    nActualWidth  += vPoint.x;
-    nActualHeight += vPoint.y;
-
-    POINTL                          vPointl;
-
-    vPointl.x = vRect2.xLeft;
-    vPointl.y  = vRect2.yTop;
-
-    ::WinSetWindowPos( hWnd
-                      ,HWND_TOP
-                      ,vPointl.x
-                      ,vPointl.y
-                      ,nActualWidth
-                      ,nActualHeight
-                      ,SWP_MOVE | SWP_SIZE | SWP_SHOW
-                     );
-
-    wxSizeEvent                     vEvent( wxSize( nWidth
-                                                   ,nHeight
-                                                  )
-                                           ,m_windowId
-                                          );
-    vEvent.SetEventObject(this);
-    GetEventHandler()->ProcessEvent(vEvent);
+    wxTopLevelWindow::DoSetClientSize( nWidth
+                                      ,nHeight
+                                     );
 } // end of wxFrame::DoSetClientSize
 
-void wxFrame::DoGetSize(
-  int*                              pWidth
-, int*                              pHeight
-) const
-{
-    RECTL                           vRect;
-
-    ::WinQueryWindowRect(m_hFrame, &vRect);
-    *pWidth = vRect.xRight - vRect.xLeft;
-    *pHeight = vRect.yTop - vRect.yBottom;
-} // end of wxFrame::DoGetSize
-
-void wxFrame::DoGetPosition(
-  int*                              pX
-, int*                              pY
-) const
-{
-    RECTL                           vRect;
-    POINTL                          vPoint;
-
-    ::WinQueryWindowRect(m_hFrame, &vRect);
-
-    *pX = vRect.xRight - vRect.xLeft;
-    *pY = vRect.yTop - vRect.yBottom;
-} // end of wxFrame::DoGetPosition
-
 // ----------------------------------------------------------------------------
-// variations around ::ShowWindow()
+// wxFrame: various geometry-related functions
 // ----------------------------------------------------------------------------
 
-void wxFrame::DoShowWindow(
-  int                               bShowCmd
-)
+void wxFrame::Raise()
 {
-    ::WinShowWindow(m_hFrame, (BOOL)bShowCmd);
-    m_bIconized = bShowCmd == SWP_MINIMIZE;
-} // end of wxFrame::DoShowWindow
+    wxFrameBase::Raise();
+    ::WinSetWindowPos( (HWND) GetParent()->GetHWND()
+                      ,HWND_TOP
+                      ,0
+                      ,0
+                      ,0
+                      ,0
+                      ,SWP_ZORDER
+                     );
+}
 
-bool wxFrame::Show(
-  bool                              bShow
-)
+// generate an artificial resize event
+void wxFrame::SendSizeEvent()
 {
-    int                             nShowCmd;
-    SWP                             vSwp;
-
-    if (bShow)
-    {
-        nShowCmd = SWP_SHOW;
-    }
-    else // hide
-    {
-        nShowCmd = SWP_HIDE;
-    }
-
-    DoShowWindow(nShowCmd);
-
-    if (bShow)
-    {
-        wxActivateEvent             vEvent(wxEVT_ACTIVATE, TRUE, m_windowId);
-
-        ::WinQueryWindowPos(m_hFrame, &vSwp);
-        m_bIconized = vSwp.fl & SWP_MINIMIZE;
-        ::WinQueryWindowPos(m_hWnd, &m_vSwpClient);
-        ::WinSendMsg(m_hFrame, WM_UPDATEFRAME, (MPARAM)~0, 0);
-        ::WinEnableWindow(m_hFrame, TRUE);
-        vEvent.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(vEvent);
-    }
-    else
+    if (!m_bIconized)
     {
-        //
-        // Try to highlight the correct window (the parent)
-        //
-        if (GetParent())
-        {
-            HWND                    hWndParent = GetHwndOf(GetParent());
-
-            ::WinQueryWindowPos(hWndParent, &vSwp);
-            m_bIconized = vSwp.fl & SWP_MINIMIZE;
-            if (hWndParent)
-                ::WinSetWindowPos( hWndParent
-                                  ,HWND_TOP
-                                  ,vSwp.x
-                                  ,vSwp.y
-                                  ,vSwp.cx
-                                  ,vSwp.cy
-                                  ,SWP_ZORDER | SWP_ACTIVATE | SWP_SHOW | SWP_MOVE
-                                 );
-            ::WinEnableWindow(hWndParent, TRUE);
-        }
-    }
-    return TRUE;
-} // end of wxFrame::Show
-
-void wxFrame::Iconize(
-  bool                              bIconize
-)
-{
-    DoShowWindow(bIconize ? SWP_MINIMIZE : SWP_RESTORE);
-} // end of wxFrame::Iconize
-
-void wxFrame::Maximize(
-  bool                              bMaximize)
-{
-    DoShowWindow(bMaximize ? SWP_MAXIMIZE : SWP_RESTORE);
-} // end of wxFrame::Maximize
-
-void wxFrame::Restore()
-{
-    DoShowWindow(SWP_RESTORE);
-} // end of wxFrame::Restore
-
-bool wxFrame::IsIconized() const
-{
-    SWP                             vSwp;
-
-    ::WinQueryWindowPos(m_hFrame, &vSwp);
-
-    if (vSwp.fl & SWP_MINIMIZE)
-        ((wxFrame*)this)->m_bIconized = TRUE;
-    else
-        ((wxFrame*)this)->m_bIconized = FALSE;
-    return m_bIconized;
-} // end of wxFrame::IsIconized
-
-// Is it maximized?
-bool wxFrame::IsMaximized() const
-{
-    SWP                             vSwp;
-    bool                            bIconic;
-
-    ::WinQueryWindowPos(m_hFrame, &vSwp);
-    return (vSwp.fl & SWP_MAXIMIZE);
-} // end of wxFrame::IsMaximized
-
-void wxFrame::SetIcon(
-  const wxIcon&                     rIcon
-)
-{
-    wxFrameBase::SetIcon(rIcon);
+        RECTL                       vRect = wxGetWindowRect(GetHwnd());
 
-    if ((m_icon.GetHICON()) != NULLHANDLE)
-    {
-        ::WinSendMsg( m_hFrame
-                     ,WM_SETICON
-                     ,(MPARAM)((HPOINTER)m_icon.GetHICON())
-                     ,NULL
-                    );
-        ::WinSendMsg( m_hFrame
-                     ,WM_UPDATEFRAME
-                     ,(MPARAM)FCF_ICON
-                     ,(MPARAM)0
-                    );
+        (void)::WinPostMsg( m_hFrame
+                           ,WM_SIZE
+                           ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom)
+                           ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom)
+                          );
     }
-} // end of wxFrame::SetIcon
+}
 
 #if wxUSE_STATUSBAR
 wxStatusBar* wxFrame::OnCreateStatusBar(
@@ -960,191 +661,6 @@ bool wxFrame::ShowFullScreen(
 //
 // Frame window
 //
-bool wxFrame::OS2Create(
-  int                               nId
-, wxWindow*                         pParent
-, const wxChar*                     zWclass
-, wxWindow*                         pWxWin
-, const wxChar*                     zTitle
-, int                               nX
-, int                               nY
-, int                               nWidth
-, int                               nHeight
-, long                              ulStyle
-)
-{
-    ULONG                           ulCreateFlags = 0L;
-    ULONG                           ulStyleFlags = 0L;
-    ULONG                           ulExtraFlags = 0L;
-    FRAMECDATA                      vFrameCtlData;
-    HWND                            hParent = NULLHANDLE;
-    HWND                            hTitlebar = NULLHANDLE;
-    HWND                            hHScroll = NULLHANDLE;
-    HWND                            hVScroll = NULLHANDLE;
-    HWND                            hFrame = NULLHANDLE;
-    HWND                            hClient = NULLHANDLE;
-    SWP                             vSwp[10];
-    RECTL                           vRect[10];
-    USHORT                          uCtlCount;
-    ERRORID                         vError;
-    wxString                        sError;
-
-    m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON);
-
-    if (pParent)
-        hParent = GetWinHwnd(pParent);
-    else
-        hParent = HWND_DESKTOP;
-
-    if (ulStyle == wxDEFAULT_FRAME_STYLE)
-        ulCreateFlags = FCF_SIZEBORDER | FCF_TITLEBAR | FCF_SYSMENU |
-                        FCF_MINMAX | FCF_TASKLIST;
-    else
-    {
-        if ((ulStyle & wxCAPTION) == wxCAPTION)
-            ulCreateFlags = FCF_TASKLIST;
-        else
-            ulCreateFlags = FCF_NOMOVEWITHOWNER;
-
-        if ((ulStyle & wxVSCROLL) == wxVSCROLL)
-            ulCreateFlags |= FCF_VERTSCROLL;
-        if ((ulStyle & wxHSCROLL) == wxHSCROLL)
-            ulCreateFlags |= FCF_HORZSCROLL;
-        if (ulStyle & wxMINIMIZE_BOX)
-            ulCreateFlags |= FCF_MINBUTTON;
-        if (ulStyle & wxMAXIMIZE_BOX)
-            ulCreateFlags |= FCF_MAXBUTTON;
-        if (ulStyle & wxTHICK_FRAME)
-            ulCreateFlags |= FCF_DLGBORDER;
-        if (ulStyle & wxSYSTEM_MENU)
-            ulCreateFlags |= FCF_SYSMENU;
-        if (ulStyle & wxCAPTION)
-            ulCreateFlags |= FCF_TASKLIST;
-        if (ulStyle & wxCLIP_CHILDREN)
-        {
-            // Invalid for frame windows under PM
-        }
-
-        if (ulStyle & wxTINY_CAPTION_VERT)
-            ulCreateFlags |= FCF_TASKLIST;
-        if (ulStyle & wxTINY_CAPTION_HORIZ)
-            ulCreateFlags |= FCF_TASKLIST;
-
-        if ((ulStyle & wxTHICK_FRAME) == 0)
-            ulCreateFlags |= FCF_BORDER;
-        if (ulStyle & wxFRAME_TOOL_WINDOW)
-            ulExtraFlags = kFrameToolWindow;
-
-        if (ulStyle & wxSTAY_ON_TOP)
-            ulCreateFlags |= FCF_SYSMODAL;
-    }
-    if ((ulStyle & wxMINIMIZE) || (ulStyle & wxICONIZE))
-        ulStyleFlags |= WS_MINIMIZED;
-    if (ulStyle & wxMAXIMIZE)
-        ulStyleFlags |= WS_MAXIMIZED;
-
-    //
-    // Clear the visible flag, we always call show
-    //
-    ulStyleFlags &= (unsigned long)~WS_VISIBLE;
-    m_bIconized = FALSE;
-
-    //
-    // Set the frame control block
-    //
-    vFrameCtlData.cb            = sizeof(vFrameCtlData);
-    vFrameCtlData.flCreateFlags = ulCreateFlags;
-    vFrameCtlData.hmodResources = 0L;
-    vFrameCtlData.idResources   = 0;
-
-    //
-    // Create the frame window:  We break ranks with other ports now
-    // and instead of calling down into the base wxWindow class' OS2Create
-    // we do all our own stuff here.  We will set the needed pieces
-    // of wxWindow manually, here.
-    //
-
-     hFrame = ::WinCreateStdWindow( hParent
-                                   ,ulStyleFlags   // frame-window style
-                                   ,&ulCreateFlags // window style
-                                   ,(PSZ)zWclass   // class name
-                                   ,(PSZ)zTitle    // window title
-                                   ,0L             // default client style
-                                   ,NULLHANDLE     // resource in executable file
-                                   ,0              // resource id
-                                   ,&hClient       // receives client window handle
-                                  );
-    if (!hFrame)
-    {
-        vError = ::WinGetLastError(vHabmain);
-        sError = wxPMErrorToStr(vError);
-        wxLogError("Error creating frame. Error: %s\n", sError);
-        return FALSE;
-    }
-
-    //
-    // wxWindow class' m_hWnd set here and needed associations
-    //
-    m_hFrame = hFrame;
-    m_hWnd   = hClient;
-    wxAssociateWinWithHandle(m_hWnd, this);
-    wxAssociateWinWithHandle(m_hFrame, this);
-
-    m_backgroundColour.Set(wxString("GREY"));
-
-    LONG                            lColor = (LONG)m_backgroundColour.GetPixel();
-
-    if (!::WinSetPresParam( m_hWnd
-                           ,PP_BACKGROUNDCOLOR
-                           ,sizeof(LONG)
-                           ,(PVOID)&lColor
-                          ))
-    {
-        vError = ::WinGetLastError(vHabmain);
-        sError = wxPMErrorToStr(vError);
-        wxLogError("Error creating frame. Error: %s\n", sError);
-        return FALSE;
-    }
-
-    //
-    // Now need to subclass window.  Instead of calling the SubClassWin in wxWindow
-    // we manually subclass here because we don't want to use the main wxWndProc
-    // by default
-    //
-    m_fnOldWndProc = (WXFARPROC) ::WinSubclassWindow(m_hFrame, (PFNWP)wxFrameMainWndProc);
-
-    //
-    // Now size everything.  If adding a menu the client will need to be resized.
-    //
-
-    if (pParent)
-    {
-        nY = pParent->GetSize().y - (nY + nHeight);
-    }
-    else
-    {
-        RECTL                   vRect;
-
-        ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
-        nY = vRect.yTop - (nY + nHeight);
-    }
-    if (!::WinSetWindowPos( m_hFrame
-                           ,HWND_TOP
-                           ,nX
-                           ,nY
-                           ,nWidth
-                           ,nHeight
-                           ,SWP_SIZE | SWP_MOVE | SWP_ACTIVATE | SWP_ZORDER
-                          ))
-    {
-        vError = ::WinGetLastError(vHabmain);
-        sError = wxPMErrorToStr(vError);
-        wxLogError("Error sizing frame. Error: %s\n", sError);
-        return FALSE;
-    }
-    return TRUE;
-} // end of wxFrame::OS2Create
-
 //
 // Default activation behaviour - set the focus for the first child
 // subwindow found.
@@ -1357,6 +873,11 @@ void wxFrame::IconizeChildFrames(
     }
 } // end of wxFrame::IconizeChildFrames
 
+WXHICON wxFrame::GetDefaultIcon() const
+{
+    return (WXHICON)(wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON
+                                      : wxDEFAULT_FRAME_ICON);
+}
 // ===========================================================================
 // message processing
 // ===========================================================================
diff --git a/src/os2/gauge.cpp b/src/os2/gauge.cpp
index c1fe612f6c..449788d6a3 100644
--- a/src/os2/gauge.cpp
+++ b/src/os2/gauge.cpp
@@ -155,7 +155,14 @@ bool wxGauge::Create(
     if (m_windowStyle & wxCLIP_SIBLINGS)
         lMsStyle |= WS_CLIPSIBLINGS;
 
-
+    //
+    // 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)))
+            lMsStyle |= WS_CLIPSIBLINGS;
 
     m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                        ,WC_ENTRYFIELD            // Window class
diff --git a/src/os2/listbox.cpp b/src/os2/listbox.cpp
index 04dffe2b68..9fe882a4fb 100644
--- a/src/os2/listbox.cpp
+++ b/src/os2/listbox.cpp
@@ -142,6 +142,15 @@ bool wxListBox::Create(
     //
     lStyle |= LS_NOADJUSTPOS;
 
+    //
+    // 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)))
+            lStyle |= WS_CLIPSIBLINGS;
+
     m_hWnd = (WXHWND)::WinCreateWindow( GetWinHwnd(pParent) // Parent
                                        ,WC_LISTBOX          // Default Listbox class
                                        ,"LISTBOX"           // Control's name
@@ -170,6 +179,29 @@ bool wxListBox::Create(
         Append(asChoices[lUi]);
     }
     SetFont(pParent->GetFont());
+    
+    //
+    // Set standard wxWindows colors for Listbox items and highlighting
+    //
+    wxColour                        vColour;
+
+    vColour.Set(wxString("WHITE"));
+
+    LONG                            lColor = (LONG)vColour.GetPixel();
+
+    ::WinSetPresParam( m_hWnd
+                      ,PP_HILITEFOREGROUNDCOLOR
+                      ,sizeof(LONG)
+                      ,(PVOID)&lColor
+                     );
+    vColour.Set(wxString("NAVY"));
+    lColor = (LONG)vColour.GetPixel();
+    ::WinSetPresParam( m_hWnd
+                      ,PP_HILITEBACKGROUNDCOLOR
+                      ,sizeof(LONG)
+                      ,(PVOID)&lColor
+                     );
+
     SetSize( nX
             ,nY
             ,nWidth
diff --git a/src/os2/makefile.va b/src/os2/makefile.va
index 66bf9f8ae0..ca3af59645 100644
--- a/src/os2/makefile.va
+++ b/src/os2/makefile.va
@@ -526,6 +526,7 @@ OS2OBJS = \
   ..\os2\$D\timer.obj \
   ..\os2\$D\toolbar.obj \
   ..\os2\$D\tooltip.obj \
+  ..\os2\$D\toplevel.obj \
   ..\os2\$D\utils.obj \
   ..\os2\$D\utilsexc.obj \
   ..\os2\$D\wave.obj \
@@ -610,6 +611,7 @@ OS2LIBOBJS2 = \
   timer.obj \
   toolbar.obj \
   tooltip.obj \
+  toplevel.obj \
   utils.obj \
   utilsexc.obj \
   wave.obj \
@@ -958,6 +960,7 @@ $(OS2LIBOBJS2):
   copy ..\os2\$D\timer.obj
   copy ..\os2\$D\toolbar.obj
   copy ..\os2\$D\tooltip.obj
+  copy ..\os2\$D\toplevel.obj
   copy ..\os2\$D\utils.obj
   copy ..\os2\$D\utilsexc.obj
   copy ..\os2\$D\wave.obj
diff --git a/src/os2/radiobox.cpp b/src/os2/radiobox.cpp
index fa32d2ccad..70a9a050e4 100644
--- a/src/os2/radiobox.cpp
+++ b/src/os2/radiobox.cpp
@@ -294,7 +294,11 @@ bool wxRadioBox::Create(
 
 
     if (!OS2CreateControl( "STATIC"
-                          ,SS_GROUPBOX | WS_GROUP
+#if RADIOBTN_PARENT_IS_RADIOBOX
+                          ,SS_GROUPBOX | WS_GROUP | WS_CLIPCHILDREN
+#else
+                          ,SS_GROUPBOX | WS_GROUP | WS_CLIPSIBLINGS
+#endif
                           ,rPos
                           ,rSize
                           ,rsTitle
@@ -341,11 +345,19 @@ bool wxRadioBox::Create(
                                                                          ,NULL
                                                                          ,NULL
                                                                         );
+        lColor = (LONG)vColour.GetPixel();
         ::WinSetPresParam( hWndBtn
                           ,PP_FOREGROUNDCOLOR
                           ,sizeof(LONG)
                           ,(PVOID)&lColor
                          );
+        lColor = (LONG)m_backgroundColour.GetPixel();
+
+        ::WinSetPresParam( hWndBtn
+                          ,PP_BACKGROUNDCOLOR
+                          ,sizeof(LONG)
+                          ,(PVOID)&lColor
+                         );
         if (!hWndBtn)
         {
             return FALSE;
@@ -374,11 +386,19 @@ bool wxRadioBox::Create(
                              ,NULL
                             );
      SetFont(*wxSMALL_FONT);
+    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
+                     );
     SetSelection(0);
     SetSize( rPos.x
             ,rPos.y
diff --git a/src/os2/radiobut.cpp b/src/os2/radiobut.cpp
index 8878abed12..83444cd1f0 100644
--- a/src/os2/radiobut.cpp
+++ b/src/os2/radiobut.cpp
@@ -81,6 +81,15 @@ bool wxRadioButton::Create(
 
     if (m_windowStyle & wxCLIP_SIBLINGS )
         lsStyle |= WS_CLIPSIBLINGS;
+    //
+    // 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)))
+            lsStyle |= WS_CLIPSIBLINGS;
+
     m_hWnd = (WXHWND)::WinCreateWindow ( GetHwndOf(pParent)
                                         ,WC_BUTTON
                                         ,rsLabel.c_str()
diff --git a/src/os2/slider.cpp b/src/os2/slider.cpp
index ecb5f09f45..7f2ba24e7f 100644
--- a/src/os2/slider.cpp
+++ b/src/os2/slider.cpp
@@ -200,6 +200,15 @@ bool wxSlider::Create(
     {
         lMsStyle |= WS_VISIBLE | SS_TEXT | DT_VCENTER;
 
+        //
+        // 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)))
+                lMsStyle |= WS_CLIPSIBLINGS;
+
         m_hStaticValue = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                                    ,WC_STATIC                // Window class
                                                    ,(PSZ)NULL                // Initial Text
@@ -219,6 +228,15 @@ bool wxSlider::Create(
         lWstyle = SS_TEXT|DT_LEFT|WS_VISIBLE;
         if (m_windowStyle & wxCLIP_SIBLINGS)
             lWstyle |= WS_CLIPSIBLINGS;
+        //
+        // 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)))
+                lWstyle |= WS_CLIPSIBLINGS;
+
         m_hStaticMin = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                                  ,WC_STATIC                // Window class
                                                  ,(PSZ)wxBuffer            // Initial Text
@@ -263,6 +281,15 @@ bool wxSlider::Create(
     else
         lMsStyle |= SLS_PRIMARYSCALE2;
 
+    //
+    // 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)))
+            lMsStyle |= WS_CLIPSIBLINGS;
+
     m_nPageSize = ((nMaxValue - nMinValue)/10);
     vSlData.usScale1Increments = m_nPageSize;
     vSlData.usScale2Increments = m_nPageSize;
@@ -311,6 +338,15 @@ bool wxSlider::Create(
         lWstyle = SS_TEXT|DT_LEFT|WS_VISIBLE;
         if (m_windowStyle & wxCLIP_SIBLINGS)
             lMsStyle |= WS_CLIPSIBLINGS;
+        //
+        // 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)))
+                lWstyle |= WS_CLIPSIBLINGS;
+
         m_hStaticMax = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                                  ,WC_STATIC                // Window class
                                                  ,(PSZ)wxBuffer            // Initial Text
diff --git a/src/os2/spinbutt.cpp b/src/os2/spinbutt.cpp
index 7c9774ede3..55e9b2c6a3 100644
--- a/src/os2/spinbutt.cpp
+++ b/src/os2/spinbutt.cpp
@@ -102,6 +102,15 @@ bool wxSpinButton::Create(
     if (m_windowStyle & wxCLIP_SIBLINGS )
         lSstyle |= WS_CLIPSIBLINGS;
 
+    //
+    // 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)))
+            lSstyle |= WS_CLIPSIBLINGS;
+
     SPBCDATA                        vCtrlData;
 
     vCtrlData.cbSize = sizeof(SPBCDATA);
diff --git a/src/os2/spinctrl.cpp b/src/os2/spinctrl.cpp
index 516ee8f9cb..6804a3ab94 100644
--- a/src/os2/spinctrl.cpp
+++ b/src/os2/spinctrl.cpp
@@ -151,6 +151,15 @@ bool wxSpinCtrl::Create(
     if (m_windowStyle & wxCLIP_SIBLINGS )
         lSstyle |= WS_CLIPSIBLINGS;
 
+    //
+    // 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)))
+            lSstyle |= WS_CLIPSIBLINGS;
+
     SPBCDATA                        vCtrlData;
 
     vCtrlData.cbSize = sizeof(SPBCDATA);
diff --git a/src/os2/stattext.cpp b/src/os2/stattext.cpp
index fbeefc707f..5b214b0987 100644
--- a/src/os2/stattext.cpp
+++ b/src/os2/stattext.cpp
@@ -66,6 +66,15 @@ bool wxStaticText::Create(
         lSstyle |= DT_RIGHT;
     else
         lSstyle |= DT_LEFT;
+    //
+    // 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)))
+            lSstyle |= WS_CLIPSIBLINGS;
+
     m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                        ,WC_STATIC                // Window class
                                        ,(PSZ)rsLabel.c_str()     // Initial Text
diff --git a/src/os2/textctrl.cpp b/src/os2/textctrl.cpp
index 0e4b7a4461..32bc0f69d8 100644
--- a/src/os2/textctrl.cpp
+++ b/src/os2/textctrl.cpp
@@ -117,37 +117,11 @@ bool wxTextCtrl::Create(
         return FALSE;
 
     wxPoint                         vPos = rPos; // The OS/2 position
+    SWP                             vSwp;
 
     if (pParent )
     {
         pParent->AddChild(this);
-        hParent = GetWinHwnd(pParent);
-        //
-        // OS2 uses normal coordinates, no bassackwards Windows ones
-        //
-        if (pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
-            pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
-           )
-        {
-            wxWindow*               pGrandParent = NULL;
-
-            pGrandParent = pParent->GetParent();
-            if (pGrandParent)
-                nTempy = pGrandParent->GetSize().y - (vPos.y + rSize.y);
-            else
-                nTempy = pParent->GetSize().y - (vPos.y + rSize.y);
-        }
-        else
-            nTempy = pParent->GetSize().y - (vPos.y + rSize.y);
-        vPos.y = nTempy;
-    }
-    else
-    {
-        RECTL                   vRect;
-
-        ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
-        hParent = HWND_DESKTOP;
-        vPos.y = vRect.yTop - (vPos.y + rSize.y);
     }
 
     m_windowStyle = lStyle;
@@ -180,10 +154,15 @@ bool wxTextCtrl::Create(
         if (m_windowStyle & wxTE_PASSWORD) // hidden input
             lSstyle |= ES_UNREADABLE;
     }
-    if ( pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
-         pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
-       )
-        lSstyle |= WS_CLIPSIBLINGS;
+    //
+    // 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)))
+            lSstyle |= WS_CLIPSIBLINGS;
+
     if (m_bIsMLE)
     {
         m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
@@ -244,6 +223,13 @@ bool wxTextCtrl::Create(
         SetValue(rsValue);
     }
     SetupColours();
+    //
+    // If X and/or Y are not zero the difference is the compensation value
+    // for margins for OS/2 controls.
+    //
+    ::WinQueryWindowPos(m_hWnd, &vSwp);
+    SetXComp(vSwp.x);
+    SetYComp(vSwp.y);
     SetSize( vPos.x
             ,vPos.y
             ,rSize.x
diff --git a/src/os2/window.cpp b/src/os2/window.cpp
index e06c94650c..f6e3e6082e 100644
--- a/src/os2/window.cpp
+++ b/src/os2/window.cpp
@@ -369,7 +369,6 @@ bool wxWindowOS2::Create(
 )
 {
     HWND                            hParent = NULLHANDLE;
-    wxPoint                         vPos = rPos; // The OS/2 position
     ULONG                           ulCreateFlags = 0;
     WXDWORD                         dwExStyle = 0;
 
@@ -442,23 +441,17 @@ bool wxWindowOS2::Create(
     }
 
     //
-    // Generic OS/2 Windows are created with no owner, no Z Order, no Control data,
-    // and no presentation parameters
+    // Generic OS/2 Windows have no Control Data but other classes
+    // that call OS2Create may have some.
     //
-    OS2Create( hParent
-              ,(PSZ)wxCanvasClassName
+    OS2Create( (PSZ)wxCanvasClassName
               ,rName.c_str()
               ,ulCreateFlags
-              ,vPos.x
-              ,vPos.y
-              ,WidthDefault(rSize.x)
-              ,HeightDefault(rSize.y)
-              ,NULLHANDLE
-              ,NULLHANDLE
-              ,m_windowId
-              ,NULL
-              ,NULL
+              ,rPos
+              ,rSize
+              ,NULL         // Control Data
               ,dwExStyle
+              ,TRUE         // Child
              );
 
     return(TRUE);
@@ -1084,6 +1077,19 @@ void wxWindowOS2::UnsubclassWin()
     }
 } // end of wxWindowOS2::UnsubclassWin
 
+bool wxCheckWindowWndProc(
+  WXHWND                            hWnd
+, WXFARPROC                         fnWndProc
+)
+{
+    static char                     zBuffer[512];
+    CLASSINFO                       vCls;
+
+    ::WinQueryClassName((HWND)hWnd, (LONG)512, (PCH)zBuffer);
+    ::WinQueryClassInfo(wxGetInstance(), (PSZ)zBuffer, &vCls);
+    return(fnWndProc == (WXFARPROC)vCls.pfnWindowProc);
+} // end of WinGuiBase_CheckWindowWndProc
+
 //
 // Make a Windows extended style from the given wxWindows window style
 //
@@ -1416,9 +1422,17 @@ void wxWindowOS2::DoGetSize(
 , int*                              pHeight
 ) const
 {
-    HWND                            hWnd = GetHwnd();
+    HWND                            hWnd;
     RECTL                           vRect;
 
+    if (IsKindOf(CLASSINFO(wxFrame)))
+    {
+        wxFrame*                    pFrame = wxDynamicCast(this, wxFrame);
+        hWnd = pFrame->GetFrame();
+    }
+    else
+        hWnd = GetHwnd();
+
     ::WinQueryWindowRect(hWnd, &vRect);
 
     if (pWidth)
@@ -1514,18 +1528,9 @@ void wxWindowOS2::DoGetClientSize(
 ) const
 {
     HWND                            hWnd = GetHwnd();
-    HWND                            hWndClient;
     RECTL                           vRect;
 
-    if (IsKindOf(CLASSINFO(wxFrame)))
-        hWndClient = ::WinWindowFromID(GetHwnd(), FID_CLIENT);
-    else
-        hWndClient = NULLHANDLE;
-    if( hWndClient == NULLHANDLE)
-       ::WinQueryWindowRect(GetHwnd(), &vRect);
-    else
-       ::WinQueryWindowRect(hWndClient, &vRect);
-
+   ::WinQueryWindowRect(hWnd, &vRect);
     if (pWidth)
         *pWidth  = vRect.xRight;
     if (pHeight)
@@ -1596,8 +1601,29 @@ void wxWindowOS2::DoSetSize(
     GetPosition(&nCurrentX, &nCurrentY);
     GetSize(&nCurrentWidth, &nCurrentHeight);
 
+    //
     // ... and don't do anything (avoiding flicker) if it's already ok
-    if (nX == nCurrentX && nY == nCurrentY &&
+    //
+    //
+    // Must convert Y coords to test for equality under OS/2
+    //
+    int                             nY2 = nY;
+    wxWindow*                       pParent = (wxWindow*)GetParent();
+
+    if (pParent)
+    {
+        int                         nOS2Height = GetOS2ParentHeight(pParent);
+
+        nY2 = nOS2Height - (nY2 + nHeight);
+    }
+    else
+    {
+        RECTL                       vRect;
+
+        ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
+        nY2 = vRect.yTop - (nY2 + nHeight);
+    }
+    if (nX == nCurrentX && nY2 == nCurrentY &&
         nWidth == nCurrentWidth && nHeight == nCurrentHeight)
     {
         return;
@@ -2860,148 +2886,134 @@ bool wxWindowOS2::OS2GetCreateWindowCoords(
 } // end of wxWindowOS2::OS2GetCreateWindowCoords
 
 bool wxWindowOS2::OS2Create(
-  WXHWND                            hParent
-, PSZ                               zClass
-, const wxChar*                     zTitle
+  PSZ                               zClass
+, const char*                       zTitle
 , WXDWORD                           dwStyle
-, long                              lX
-, long                              lY
-, long                              lWidth
-, long                              lHeight
-, WXHWND                            hOwner
-, WXHWND                            WXUNUSED(hZOrder)
-, unsigned long                     ulId
+, const wxPoint&                    rPos
+, const wxSize&                     rSize
 , void*                             pCtlData
-, void*                             pPresParams
 , WXDWORD                           dwExStyle
+, bool                              bIsChild
 )
 {
     ERRORID                         vError;
     wxString                        sError;
-    long                            lX1      = 0L;
-    long                            lY1      = 0L;
-    long                            lWidth1  = 20L;
-    long                            lHeight1 = 20L;
-    int                             nControlId = 0;
-    int                             nNeedsubclass = 0;
-    PCSZ                            pszClass = zClass;
-
-    //
-    // Find parent's size, if it exists, to set up a possible default
-    // panel size the size of the parent window
-    //
-    lX1 = lX;
-    lY1 = lY;
-    if (lWidth > -1L)
-        lWidth1 = lWidth;
-    if (lHeight > -1L)
-        lHeight1 = lHeight;
-
-    wxWndHook = this;
+    int                             nX      = 0L;
+    int                             nY      = 0L;
+    int                             nWidth  = 0L;
+    int                             nHeight = 0L;
+    wxWindow*                       pParent = GetParent();
+    HWND                            hWnd = NULLHANDLE;
+    HWND                            hParent;
+    long                            lControlId = 0L;
+    wxWindowCreationHook            vHook(this);
+    wxString                        sClassName((wxChar*)zClass);
+
+    OS2GetCreateWindowCoords( rPos
+                             ,rSize
+                             ,nX
+                             ,nY
+                             ,nWidth
+                             ,nHeight
+                            );
 
-    //
-    // check to see if the new window is a standard control
-    //
-    if ((ULONG)zClass == (ULONG)WC_BUTTON ||
-        (ULONG)zClass == (ULONG)WC_COMBOBOX ||
-        (ULONG)zClass == (ULONG)WC_CONTAINER ||
-        (ULONG)zClass == (ULONG)WC_ENTRYFIELD ||
-        (ULONG)zClass == (ULONG)WC_FRAME ||
-        (ULONG)zClass == (ULONG)WC_LISTBOX ||
-        (ULONG)zClass == (ULONG)WC_MENU ||
-        (ULONG)zClass == (ULONG)WC_NOTEBOOK ||
-        (ULONG)zClass == (ULONG)WC_SCROLLBAR ||
-        (ULONG)zClass == (ULONG)WC_SPINBUTTON ||
-        (ULONG)zClass == (ULONG)WC_STATIC ||
-        (ULONG)zClass == (ULONG)WC_TITLEBAR ||
-        (ULONG)zClass == (ULONG)WC_VALUESET
-       )
-    {
-            nControlId = ulId;
-    }
+    if (GetWindowStyleFlag() & wxPOPUP_WINDOW)
+        hParent = HWND_DESKTOP;
     else
     {
-        // no standard controls
-        if(wxString (wxT("wxFrameClass")) == wxString(zClass) )
+        if ((bIsChild || HasFlag(wxFRAME_TOOL_WINDOW)) && pParent )
         {
-            pszClass =  WC_FRAME;
-            nNeedsubclass = 1;
+            //
+            // This is either a normal child window or a top level window with
+            // wxFRAME_TOOL_WINDOW style (see below)
+            //
+            hParent = GetHwndOf(pParent);
         }
         else
         {
-            nControlId = ulId;
-            if(nControlId < 0)
-                nControlId = FID_CLIENT;
+            //
+            // This is either a window for which no parent was specified (not
+            // much we can do then) or a frame without wxFRAME_TOOL_WINDOW
+            // style: we should use NULL parent HWND for it or it would be
+            // always on top of its parent which is not what we usually want
+            // (in fact, we only want it for frames with the special
+            // wxFRAME_TOOL_WINDOW as above)
+            //
+            hParent = NULL;
+        }
+    }
+    if (bIsChild)
+    {
+        lControlId = GetId();
+        if (GetWindowStyleFlag() & wxCLIP_SIBLINGS)
+        {
+            dwStyle |= WS_CLIPSIBLINGS;
         }
     }
-
-   HWND parent;
-   if ( GetWindowStyleFlag() & wxPOPUP_WINDOW )
-   {
-       // popup windows should have desktop as parent because they shouldn't
-       // be limited to the parents client area as child windows usually are
-       parent = HWND_DESKTOP;
-   }
-   else if ( hParent )
-   {
-       parent = hParent;
-   }
-   else
-   {
-       // top level window
-       parent = NULL;
-   }
-
     //
-    // We will either have a registered class via string name or a standard PM Class via a long
+    // For each class "Foo" we have we also have "FooNR" ("no repaint") class
+    // which is the same but without CS_[HV]REDRAW class styles so using it
+    // ensures that the window is not fully repainted on each resize
     //
-    m_hWnd = (WXHWND)::WinCreateWindow(parent, zClass,
-                                       (PSZ)zTitle ? zTitle : wxT(""),
-                                       dwStyle, lX1, lY1, lWidth, lHeight,
-                                       hOwner, HWND_TOP, (ULONG)nControlId,
-                                       pCtlData, pPresParams);
-
-    if (!m_hWnd)
+    if (GetWindowStyleFlag() & wxNO_FULL_REPAINT_ON_RESIZE)
     {
-        vError = ::WinGetLastError(vHabmain);
-        sError = wxPMErrorToStr(vError);
-        wxLogError("Can't create window of class %s!. Error: %s\n", zClass, sError);
-        return FALSE;
+        sClassName += wxT("NR");
     }
-    m_dwExStyle = dwExStyle;
-    ::WinSetWindowULong(m_hWnd, QWL_USER, (ULONG) this);
-    wxWndHook = NULL;
 
-#ifdef __WXDEBUG__
-    wxNode*                         pNode = wxWinHandleList->Member(this);
-
-    if (pNode)
+    //
+    // If the window being created is a Frame's Statusbar we need to use
+    // the actual Frame's size, not its client
+    //
+    if (pParent)
     {
-        HWND                        hWnd = (HWND)pNode->GetKeyInteger();
-
-        if (hWnd != (HWND)m_hWnd)
-
+        if (IsKindOf(CLASSINFO(wxStatusBar)) &&
+            pParent->IsKindOf(CLASSINFO(wxFrame)))
         {
-            wxLogError("A second HWND association is being added for the same window!");
+            RECTL                   vRect;
+            wxFrame*                pFrame = wxDynamicCast(pParent, wxFrame);
+
+            ::WinQueryWindowRect((HWND)pFrame->GetFrame(), &vRect);
+            nY = vRect.yTop - (nY + nHeight);
         }
+        else
+            nY = pParent->GetSize().y - (nY + nHeight);
     }
-#endif
-    wxAssociateWinWithHandle((HWND)m_hWnd
-                             ,this
-                            );
-    //
-    // Now need to subclass window.
-    //
-    if(!nNeedsubclass)
+    else
     {
-         wxAssociateWinWithHandle((HWND)m_hWnd,this);
+        RECTL                   vRect;
+
+        ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
+        nY = vRect.yTop - (nY + nHeight);
     }
-    else
+    m_hWnd = (WXHWND)::WinCreateWindow( (HWND)hParent
+                                      ,(PSZ)sClassName.c_str()
+                                      ,(PSZ)zTitle ? zTitle : ""
+                                      ,(ULONG)dwStyle
+                                      ,(LONG)0L
+                                      ,(LONG)0L
+                                      ,(LONG)0L
+                                      ,(LONG)0L
+                                      ,NULLHANDLE
+                                      ,HWND_TOP
+                                      ,(ULONG)lControlId
+                                      ,pCtlData
+                                      ,NULL
+                                     );
+    if (!m_hWnd)
     {
-        SubclassWin(GetHWND());
+        vError = ::WinGetLastError(wxGetInstance());
+        sError = wxPMErrorToStr(vError);
+        return FALSE;
     }
+    SubclassWin(m_hWnd);
+    SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+    SetSize( nX
+            ,nY
+            ,nWidth
+            ,nHeight
+           );
     return TRUE;
-} // end of wxWindowOS2::OS2Create
+} // end of WinGuiBase_Window::OS2Create
 
 // ===========================================================================
 // OS2 PM message handlers
diff --git a/src/os2/wx23.def b/src/os2/wx23.def
index 453575a012..0e3afd203b 100644
--- a/src/os2/wx23.def
+++ b/src/os2/wx23.def
@@ -4,7 +4,7 @@ DATA MULTIPLE NONSHARED READWRITE LOADONCALL
 CODE LOADONCALL
 
 EXPORTS
-;From library:  F:\DEV\WX2\WXWINDOWS\LIB\WX.lib
+;From library:  F:\DEV\WX2\WXWINDOWS\LIB\wx.lib
   ;From object file:  dummy.cpp
     ;PUBDEFs (Symbols available from object file):
       wxDummyChar
@@ -888,8 +888,29 @@ EXPORTS
       CreateButtonSizer__12wxDialogBaseFl
       ;wxDialogBase::Init()
       Init__12wxDialogBaseFv
+      ;wxDialogBase::GetDefaultItem() const
+      GetDefaultItem__12wxDialogBaseCFv
+      ;wxDialogBase::SetDefaultItem(wxWindow*)
+      SetDefaultItem__12wxDialogBaseFP8wxWindow
       ;wxDialogBase::CreateTextSizer(const wxString&)
       CreateTextSizer__12wxDialogBaseFRC8wxString
+      ;wxDialogBase::OnFocus(wxFocusEvent&)
+      OnFocus__12wxDialogBaseFR12wxFocusEvent
+      ;wxDialogBase::sm_eventTableEntries
+      sm_eventTableEntries__12wxDialogBase
+      ;wxDialogBase::SetFocus()
+      SetFocus__12wxDialogBaseFv
+      ;wxDialogBase::OnChildFocus(wxChildFocusEvent&)
+      OnChildFocus__12wxDialogBaseFR17wxChildFocusEvent
+      __vft12wxDialogBase8wxObject
+      ;wxDialogBase::sm_eventTable
+      sm_eventTable__12wxDialogBase
+      ;wxDialogBase::OnNavigationKey(wxNavigationKeyEvent&)
+      OnNavigationKey__12wxDialogBaseFR20wxNavigationKeyEvent
+      ;wxDialogBase::RemoveChild(wxWindowBase*)
+      RemoveChild__12wxDialogBaseFP12wxWindowBase
+      ;wxDialogBase::GetEventTable() const
+      GetEventTable__12wxDialogBaseCFv
   ;From object file:  ..\common\dobjcmn.cpp
     ;PUBDEFs (Symbols available from object file):
       ;wxDataObjectComposite::GetDataSize(const wxDataFormat&) const
@@ -2018,6 +2039,8 @@ EXPORTS
     ;PUBDEFs (Symbols available from object file):
       ;wxFileName::Assign(const wxString&,wxPathFormat)
       Assign__10wxFileNameFRC8wxString12wxPathFormat
+      ;wxFileName::SetPath(const wxString&,wxPathFormat)
+      SetPath__10wxFileNameFRC8wxString12wxPathFormat
       ;wxFileName::Normalize(wxPathNormalize,const wxString&,wxPathFormat)
       Normalize__10wxFileNameF15wxPathNormalizeRC8wxString12wxPathFormat
       ;wxFileName::IsWild(wxPathFormat)
@@ -2166,16 +2189,26 @@ EXPORTS
       OpenFile__12wxFileSystemFRC8wxString
   ;From object file:  ..\common\fontcmn.cpp
     ;PUBDEFs (Symbols available from object file):
+      ;wxNativeFontInfo::SetUnderlined(unsigned long)
+      SetUnderlined__16wxNativeFontInfoFUl
       ;wxFontBase::GetNativeFontInfo() const
       GetNativeFontInfo__10wxFontBaseCFv
+      ;wxNativeFontInfo::GetUnderlined() const
+      GetUnderlined__16wxNativeFontInfoCFv
       ;wxFontBase::New(const wxNativeFontInfo&)
       New__10wxFontBaseFRC16wxNativeFontInfo
       ;wxFontBase::New(const wxString&)
       New__10wxFontBaseFRC8wxString
+      ;wxNativeFontInfo::FromString(const wxString&)
+      FromString__16wxNativeFontInfoFRC8wxString
       ;wxFont::operator=(const wxFont&)
       __as__6wxFontFRC6wxFont
+      ;wxNativeFontInfo::SetFamily(wxFontFamily)
+      SetFamily__16wxNativeFontInfoF12wxFontFamily
       ;wxFontBase::GetNativeFontInfoDesc() const
       GetNativeFontInfoDesc__10wxFontBaseCFv
+      ;wxNativeFontInfo::ToUserString() const
+      ToUserString__16wxNativeFontInfoCFv
       ;wxFontBase::GetWeightString() const
       GetWeightString__10wxFontBaseCFv
       ;wxFontBase::GetStyleString() const
@@ -2186,19 +2219,47 @@ EXPORTS
       SetNativeFontInfo__10wxFontBaseFRC16wxNativeFontInfo
       ;wxFontBase::SetNativeFontInfoUserDesc(const wxString&)
       SetNativeFontInfoUserDesc__10wxFontBaseFRC8wxString
+      ;wxNativeFontInfo::SetStyle(wxFontStyle)
+      SetStyle__16wxNativeFontInfoF11wxFontStyle
       ;wxFontBase::ms_encodingDefault
       ms_encodingDefault__10wxFontBase
+      ;wxNativeFontInfo::GetPointSize() const
+      GetPointSize__16wxNativeFontInfoCFv
+      ;wxNativeFontInfo::GetStyle() const
+      GetStyle__16wxNativeFontInfoCFv
+      ;wxNativeFontInfo::GetFamily() const
+      GetFamily__16wxNativeFontInfoCFv
+      ;wxNativeFontInfo::GetFaceName() const
+      GetFaceName__16wxNativeFontInfoCFv
+      ;wxNativeFontInfo::SetEncoding(wxFontEncoding)
+      SetEncoding__16wxNativeFontInfoF14wxFontEncoding
       ;wxFontBase::SetNativeFontInfo(const wxString&)
       SetNativeFontInfo__10wxFontBaseFRC8wxString
-      ;wxFontBase::operator==(const wxFont&) const
-      __eq__10wxFontBaseCFRC6wxFont
+      ;wxNativeFontInfo::SetWeight(wxFontWeight)
+      SetWeight__16wxNativeFontInfoF12wxFontWeight
       __vft10wxFontBase8wxObject
       ;wxFontBase::operator!=(const wxFont&) const
       __ne__10wxFontBaseCFRC6wxFont
+      ;wxFontBase::operator==(const wxFont&) const
+      __eq__10wxFontBaseCFRC6wxFont
+      ;wxNativeFontInfo::SetPointSize(int)
+      SetPointSize__16wxNativeFontInfoFi
+      ;wxNativeFontInfo::ToString() const
+      ToString__16wxNativeFontInfoCFv
       ;wxFontBase::GetFamilyString() const
       GetFamilyString__10wxFontBaseCFv
+      ;wxNativeFontInfo::GetEncoding() const
+      GetEncoding__16wxNativeFontInfoCFv
+      ;wxNativeFontInfo::Init()
+      Init__16wxNativeFontInfoFv
+      ;wxNativeFontInfo::GetWeight() const
+      GetWeight__16wxNativeFontInfoCFv
       ;wxFontBase::New(int,int,int,int,unsigned long,const wxString&,wxFontEncoding)
       New__10wxFontBaseFiN31UlRC8wxString14wxFontEncoding
+      ;wxNativeFontInfo::SetFaceName(wxString)
+      SetFaceName__16wxNativeFontInfoF8wxString
+      ;wxNativeFontInfo::FromUserString(const wxString&)
+      FromUserString__16wxNativeFontInfoFRC8wxString
   ;From object file:  ..\common\fontmap.cpp
     ;PUBDEFs (Symbols available from object file):
       ;wxFontMapper::GetConfig()
@@ -5086,6 +5147,8 @@ EXPORTS
       Upper__8wxStringCFv
       ;wxString::IsNumber() const
       IsNumber__8wxStringCFv
+      ;wxArrayString::GetStringArray() const
+      GetStringArray__13wxArrayStringCFv
       ;wxArrayString::Empty()
       Empty__13wxArrayStringFv
       ;wxArrayString::Copy(const wxArrayString&)
@@ -5457,12 +5520,14 @@ EXPORTS
       SendIconizeEvent__20wxTopLevelWindowBaseFUl
       ;wxTopLevelWindowBase::sm_eventTable
       sm_eventTable__20wxTopLevelWindowBase
+      ;wxConstructorForwxTopLevelWindow()
+      wxConstructorForwxTopLevelWindow__Fv
       ;wxTopLevelWindowBase::DoClientToScreen(int*,int*) const
       DoClientToScreen__20wxTopLevelWindowBaseCFPiT1
-      ;wxTopLevelWindowBase::GetEventTable() const
-      GetEventTable__20wxTopLevelWindowBaseCFv
       ;wxTopLevelWindowBase::wxTopLevelWindowBase()
       __ct__20wxTopLevelWindowBaseFv
+      ;wxTopLevelWindowBase::GetEventTable() const
+      GetEventTable__20wxTopLevelWindowBaseCFv
       ;wxTopLevelWindowBase::OnSize(wxSizeEvent&)
       OnSize__20wxTopLevelWindowBaseFR11wxSizeEvent
       __vft20wxTopLevelWindowBase8wxObject
@@ -5474,6 +5539,8 @@ EXPORTS
       DoScreenToClient__20wxTopLevelWindowBaseCFPiT1
       ;wxTopLevelWindowBase::Destroy()
       Destroy__20wxTopLevelWindowBaseFv
+      ;wxTopLevelWindow::sm_classwxTopLevelWindow
+      sm_classwxTopLevelWindow__16wxTopLevelWindow
   ;From object file:  ..\common\treebase.cpp
     ;PUBDEFs (Symbols available from object file):
       wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT
@@ -11132,8 +11199,6 @@ EXPORTS
       ;wxCheckBox::SetValue(unsigned long)
       SetValue__10wxCheckBoxFUl
       __vft16wxBitmapCheckBox8wxObject
-      ;wxCheckBox::OnCtlColor(unsigned long,unsigned long,unsigned int,unsigned int,void*,void*)
-      OnCtlColor__10wxCheckBoxFUlT1UiT3PvT5
       ;wxCheckBox::DoGetBestSize() const
       DoGetBestSize__10wxCheckBoxCFv
       ;wxCheckBox::GetValue() const
@@ -11142,8 +11207,6 @@ EXPORTS
       Create__16wxBitmapCheckBoxFP8wxWindowiPC8wxBitmapRC7wxPointRC6wxSizelRC11wxValidatorRC8wxString
       ;wxCheckBox::SetLabel(const wxString&)
       SetLabel__10wxCheckBoxFRC8wxString
-      ;wxCheckBox::Command(wxCommandEvent&)
-      Command__10wxCheckBoxFR14wxCommandEvent
       ;wxBitmapCheckBox::sm_classwxBitmapCheckBox
       sm_classwxBitmapCheckBox__16wxBitmapCheckBox
   ;From object file:  ..\os2\checklst.cpp
@@ -11815,10 +11878,6 @@ EXPORTS
       SetModal__8wxDialogFUl
       ;wxDialog::OnCancel(wxCommandEvent&)
       OnCancel__8wxDialogFR14wxCommandEvent
-      ;wxDialog::DoGetPosition(int*,int*) const
-      DoGetPosition__8wxDialogCFPiT1
-      ;wxDialog::IsIconized() const
-      IsIconized__8wxDialogCFv
       ;wxDialog::IsModal() const
       IsModal__8wxDialogCFv
       ;wxDialog::Create(wxWindow*,int,const wxString&,const wxPoint&,const wxSize&,long,const wxString&)
@@ -11832,8 +11891,6 @@ EXPORTS
       OnOK__8wxDialogFR14wxCommandEvent
       ;wxDialog::OnCloseWindow(wxCloseEvent&)
       OnCloseWindow__8wxDialogFR12wxCloseEvent
-      ;wxDialog::DoSetClientSize(int,int)
-      DoSetClientSize__8wxDialogFiT1
       ;wxDialog::Init()
       Init__8wxDialogFv
       ;wxDialog::ShowModal()
@@ -11847,10 +11904,6 @@ EXPORTS
       OnSysColourChanged__8wxDialogFR23wxSysColourChangedEvent
       ;wxDialog::DoShowModal()
       DoShowModal__8wxDialogFv
-      ;wxDialog::Destroy()
-      Destroy__8wxDialogFv
-      ;wxDialog::Iconize(unsigned long)
-      Iconize__8wxDialogFUl
       ;wxDialog::Show(unsigned long)
       Show__8wxDialogFUl
       ;wxDialog::OnApply(wxCommandEvent&)
@@ -11865,7 +11918,6 @@ EXPORTS
       OS2WindowProc__8wxDialogFUiPvT2
       ;wxDialog::GetEventTable() const
       GetEventTable__8wxDialogCFv
-      wxModelessWindows
       ;wxDialog::sm_eventTable
       sm_eventTable__8wxDialog
   ;From object file:  ..\os2\dir.cpp
@@ -12072,12 +12124,10 @@ EXPORTS
       FromString__20wxNativeEncodingInfoFRC8wxString
   ;From object file:  ..\os2\frame.cpp
     ;PUBDEFs (Symbols available from object file):
-      ;wxFrame::Show(unsigned long)
-      Show__7wxFrameFUl
-      ;wxFrame::Iconize(unsigned long)
-      Iconize__7wxFrameFUl
       ;wxFrame::HandleMenuSelect(unsigned short,unsigned short,unsigned long)
       HandleMenuSelect__7wxFrameFUsT1Ul
+      ;wxFrame::SendSizeEvent()
+      SendSizeEvent__7wxFrameFv
       ;wxFrame::OS2TranslateMessage(void**)
       OS2TranslateMessage__7wxFrameFPPv
       ;wxFrame::HandlePaint()
@@ -12093,14 +12143,8 @@ EXPORTS
       HandleSize__7wxFrameFiT1Ui
       ;wxConstructorForwxFrame()
       wxConstructorForwxFrame__Fv
-      ;wxFrame::SetIcon(const wxIcon&)
-      SetIcon__7wxFrameFRC6wxIcon
-      ;wxFrame::Restore()
-      Restore__7wxFrameFv
-      ;wxFrame::IsMaximized() const
-      IsMaximized__7wxFrameCFv
-      ;wxFrame::IsIconized() const
-      IsIconized__7wxFrameCFv
+      ;wxFrame::Raise()
+      Raise__7wxFrameFv
       ;wxFrame::GetClientAreaOrigin() const
       GetClientAreaOrigin__7wxFrameCFv
       ;wxFrame::AttachMenuBar(wxMenuBar*)
@@ -12111,28 +12155,20 @@ EXPORTS
       OnSysColourChanged__7wxFrameFR23wxSysColourChangedEvent
       ;wxFrame::ShowFullScreen(unsigned long,long)
       ShowFullScreen__7wxFrameFUll
-      ;wxFrame::DoShowWindow(int)
-      DoShowWindow__7wxFrameFi
+      ;wxFrame::m_bUseNativeStatusBar
+      m_bUseNativeStatusBar__7wxFrame
       ;wxFrame::sm_eventTable
       sm_eventTable__7wxFrame
       ;wxFrame::sm_eventTableEntries
       sm_eventTableEntries__7wxFrame
       ;wxFrame::sm_classwxFrame
       sm_classwxFrame__7wxFrame
-      ;wxFrame::m_bUseNativeStatusBar
-      m_bUseNativeStatusBar__7wxFrame
       ;wxFrame::~wxFrame()
       __dt__7wxFrameFv
       ;wxFrame::GetClient()
       GetClient__7wxFrameFv
-      ;wxFrame::OS2Create(int,wxWindow*,const char*,wxWindow*,const char*,int,int,int,int,long)
-      OS2Create__7wxFrameFiP8wxWindowPCcT2T3N41l
       ;wxFrame::HandleCommand(unsigned short,unsigned short,unsigned long)
       HandleCommand__7wxFrameFUsT1Ul
-      ;wxFrame::DoGetSize(int*,int*) const
-      DoGetSize__7wxFrameCFPiT1
-      ;wxFrame::DoGetPosition(int*,int*) const
-      DoGetPosition__7wxFrameCFPiT1
       ;wxFrame::PositionStatusBar()
       PositionStatusBar__7wxFrameFv
       ;wxFrame::PositionToolBar()
@@ -12141,14 +12177,14 @@ EXPORTS
       OS2WindowProc__7wxFrameFUiPvT2
       ;wxFrame::InternalSetMenuBar()
       InternalSetMenuBar__7wxFrameFv
+      ;wxFrame::GetDefaultIcon() const
+      GetDefaultIcon__7wxFrameCFv
       ;wxFrame::CreateToolBar(long,int,const wxString&)
       CreateToolBar__7wxFrameFliRC8wxString
-      ;wxFrame::Maximize(unsigned long)
-      Maximize__7wxFrameFUl
-      ;wxFrame::SetClient(unsigned long)
-      SetClient__7wxFrameFUl
       ;wxFrame::IconizeChildFrames(unsigned long)
       IconizeChildFrames__7wxFrameFUl
+      ;wxFrame::SetClient(unsigned long)
+      SetClient__7wxFrameFUl
       ;wxFrame::DoGetClientSize(int*,int*) const
       DoGetClientSize__7wxFrameCFPiT1
       ;wxFrame::Init()
@@ -12159,8 +12195,6 @@ EXPORTS
       GetEventTable__7wxFrameCFv
       ;wxFrame::DetachMenuBar()
       DetachMenuBar__7wxFrameFv
-      ;wxFrame::AlterChildPos()
-      AlterChildPos__7wxFrameFv
       wxFrameMainWndProc
       wxFrameWndProc
       ;wxFrame::SetClient(wxWindow*)
@@ -14036,6 +14070,49 @@ EXPORTS
       Remove__9wxToolTipFv
       ;wxToolTip::hwndTT
       hwndTT__9wxToolTip
+  ;From object file:  ..\os2\toplevel.cpp
+    ;PUBDEFs (Symbols available from object file):
+      __vft19wxTopLevelWindowOS28wxObject
+      ;wxTopLevelWindowOS2::CreateFrame(const wxString&,const wxPoint&,const wxSize&)
+      CreateFrame__19wxTopLevelWindowOS2FRC8wxStringRC7wxPointRC6wxSize
+      ;wxTopLevelWindowOS2::~wxTopLevelWindowOS2()
+      __dt__19wxTopLevelWindowOS2Fv
+      ;wxTopLevelWindowOS2::ShowFullScreen(unsigned long,long)
+      ShowFullScreen__19wxTopLevelWindowOS2FUll
+      ;wxTopLevelWindowOS2::CreateDialog(unsigned long,const wxString&,const wxPoint&,const wxSize&)
+      CreateDialog__19wxTopLevelWindowOS2FUlRC8wxStringRC7wxPointRC6wxSize
+      ;wxTopLevelWindowOS2::DoShowWindow(int)
+      DoShowWindow__19wxTopLevelWindowOS2Fi
+      ;wxTopLevelWindowOS2::Init()
+      Init__19wxTopLevelWindowOS2Fv
+      ;wxTopLevelWindowOS2::OS2GetCreateWindowFlags(long*) const
+      OS2GetCreateWindowFlags__19wxTopLevelWindowOS2CFPl
+      ;wxTopLevelWindowOS2::Iconize(unsigned long)
+      Iconize__19wxTopLevelWindowOS2FUl
+      ;wxTopLevelWindowOS2::DoSetClientSize(int,int)
+      DoSetClientSize__19wxTopLevelWindowOS2FiT1
+      ;wxTopLevelWindowOS2::AlterChildPos()
+      AlterChildPos__19wxTopLevelWindowOS2Fv
+      ;wxTopLevelWindowOS2::SetIcon(const wxIcon&)
+      SetIcon__19wxTopLevelWindowOS2FRC6wxIcon
+      ;wxTopLevelWindowOS2::Restore()
+      Restore__19wxTopLevelWindowOS2Fv
+      ;wxTopLevelWindowOS2::IsMaximized() const
+      IsMaximized__19wxTopLevelWindowOS2CFv
+      ;wxTopLevelWindowOS2::Maximize(unsigned long)
+      Maximize__19wxTopLevelWindowOS2FUl
+      ;wxTopLevelWindowOS2::EnableCloseButton(unsigned long)
+      EnableCloseButton__19wxTopLevelWindowOS2FUl
+      ;wxTopLevelWindowOS2::DoGetClientSize(int*,int*) const
+      DoGetClientSize__19wxTopLevelWindowOS2CFPiT1
+      ;wxTopLevelWindowOS2::Create(wxWindow*,int,const wxString&,const wxPoint&,const wxSize&,long,const wxString&)
+      Create__19wxTopLevelWindowOS2FP8wxWindowiRC8wxStringRC7wxPointRC6wxSizelT3
+      ;wxTopLevelWindowOS2::Show(unsigned long)
+      Show__19wxTopLevelWindowOS2FUl
+      ;wxTopLevelWindowOS2::IsIconized() const
+      IsIconized__19wxTopLevelWindowOS2CFv
+      wxDlgProc
+      wxModelessWindows
   ;From object file:  ..\os2\utils.cpp
     ;PUBDEFs (Symbols available from object file):
       gs_wxBusyCursorOld
@@ -14178,6 +14255,10 @@ EXPORTS
       HandleMouseMove__8wxWindowFiT1Ui
       ;wxWindow::Raise()
       Raise__8wxWindowFv
+      ;wxWindowCreationHook::~wxWindowCreationHook()
+      __dt__20wxWindowCreationHookFv
+      ;wxWindow::Update()
+      Update__8wxWindowFv
       ;wxWindow::UnsubclassWin()
       UnsubclassWin__8wxWindowFv
       ;wxWindow::Lower()
@@ -14186,6 +14267,8 @@ EXPORTS
       HandleMaximize__8wxWindowFv
       ;wxWindow::HandleDestroy()
       HandleDestroy__8wxWindowFv
+      ;wxWindow::Freeze()
+      Freeze__8wxWindowFv
       ;wxWindow::DoPopupMenu(wxMenu*,int,int)
       DoPopupMenu__8wxWindowFP6wxMenuiT2
       ;wxWindow::UnpackCommand(void*,void*,unsigned short*,unsigned long*,unsigned short*)
@@ -14196,6 +14279,8 @@ EXPORTS
       sm_eventTable__8wxWindow
       ;wxWindow::sm_classwxWindow
       sm_classwxWindow__8wxWindow
+      ;wxWindowCreationHook::wxWindowCreationHook(wxWindow*)
+      __ct__20wxWindowCreationHookFP8wxWindow
       ;wxWindow::SetScrollPos(int,int,unsigned long)
       SetScrollPos__8wxWindowFiT1Ul
       ;wxCharCodeWXToOS2(int,unsigned long*)
@@ -14228,6 +14313,8 @@ EXPORTS
       OS2OnMeasureItem__8wxWindowFiPPv
       ;wxWindow::OS2DestroyWindow()
       OS2DestroyWindow__8wxWindowFv
+      ;wxWindow::IsMouseInWindow() const
+      IsMouseInWindow__8wxWindowCFv
       ;wxWindow::HandleKeyUp(unsigned long,void*)
       HandleKeyUp__8wxWindowFUlPv
       ;wxWindow::HandleKeyDown(unsigned short,void*)
@@ -14241,6 +14328,8 @@ EXPORTS
       wxWndHook
       ;wxWindow::Reparent(wxWindow*)
       Reparent__8wxWindowFP8wxWindow
+      ;wxWindow::OS2GetCreateWindowCoords(const wxPoint&,const wxSize&,int&,int&,int&,int&) const
+      OS2GetCreateWindowCoords__8wxWindowCFRC7wxPointRC6wxSizeRiN33
       ;wxWindow::Enable(unsigned long)
       Enable__8wxWindowFUl
       wxWinHandleList
@@ -14293,6 +14382,8 @@ EXPORTS
       ;wxAssociateWinWithHandle(unsigned long,wxWindow*)
       wxAssociateWinWithHandle__FUlP8wxWindow
       s_currentMsg
+      ;wxWindow::OS2Create(char*,const char*,unsigned long,const wxPoint&,const wxSize&,void*,unsigned long,unsigned long)
+      OS2Create__8wxWindowFPcPCcUlRC7wxPointRC6wxSizePvN23
       ;wxWindow::GetOS2ParentHeight(wxWindow*)
       GetOS2ParentHeight__8wxWindowFP8wxWindow
       ;wxWindow::Refresh(unsigned long,const wxRect*)
@@ -14340,6 +14431,10 @@ EXPORTS
       __dt__8wxWindowFv
       ;wxGetActiveWindow()
       wxGetActiveWindow__Fv
+      ;wxCheckWindowWndProc(unsigned long,void*(*)(unsigned long,unsigned long,void*,void*))
+      wxCheckWindowWndProc__FUlPFUlT1PvT3_Pv
+      ;wxWindow::Thaw()
+      Thaw__8wxWindowFv
       ;wxWindow::OS2WindowProc(unsigned int,void*,void*)
       OS2WindowProc__8wxWindowFUiPvT2
       ;wxWindow::OS2TranslateMessage(void**)
@@ -14374,8 +14469,6 @@ EXPORTS
       HandleActivate__8wxWindowFiUl
       ;wxWindow::FindItemByHWND(unsigned long,unsigned long) const
       FindItemByHWND__8wxWindowCFUlT1
-      ;wxWindow::OS2Create(unsigned long,char*,const char*,unsigned long,long,long,long,long,unsigned long,unsigned long,unsigned long,void*,void*,unsigned long)
-      OS2Create__8wxWindowFUlPcPCcT1lN35N31PvT12_T1
       ;wxWindow::HandleChar(unsigned long,void*,unsigned long)
       HandleChar__8wxWindowFUlPvT1
       ;wxWindow::DoMoveWindow(int,int,int,int)
-- 
2.50.0

