+//
+// 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
+