From: Stefan Neis Date: Wed, 4 Jan 2006 23:27:16 +0000 (+0000) Subject: Fixed sizing and positioning. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/53758b0fc16d5aa5b2e1e3346a113cc1db677a83?ds=inline Fixed sizing and positioning. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36688 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/os2/toplevel.cpp b/src/os2/toplevel.cpp index 25196f3b23..0bd4b9e388 100644 --- a/src/os2/toplevel.cpp +++ b/src/os2/toplevel.cpp @@ -421,6 +421,9 @@ bool wxTopLevelWindowOS2::CreateDialog( ULONG ulDlgTemplate, return false; } + // Convert to OS/2 coordinates + nY = GetOS2ParentHeight(pParent) - nY - nHeight; + ::WinSetWindowPos( GetHwnd() ,HWND_TOP ,nX @@ -530,17 +533,49 @@ bool wxTopLevelWindowOS2::CreateFrame( const wxString& rsTitle, // Now size everything. If adding a menu the client will need to be resized. // - if (pParent) + if (!OS2GetCreateWindowCoords( rPos + ,rSize + ,nX + ,nY + ,nWidth + ,nHeight + )) { - nY = pParent->GetSize().y - (nY + nHeight); + nX = nWidth = (int)CW_USEDEFAULT; } - else + + // + // We can't use CW_USEDEFAULT here as we're not calling CreateWindow() + // and passing CW_USEDEFAULT to MoveWindow() results in resizing the + // window to (0, 0) size which breaks quite a lot of things, e.g. the + // sizer calculation in wxSizer::Fit() + // + if (nWidth == (int)CW_USEDEFAULT) { - RECTL vRect; + // + // The exact number doesn't matter, the dialog will be resized + // again soon anyhow but it should be big enough to allow + // calculation relying on "totalSize - clientSize > 0" work, i.e. + // at least greater than the title bar height + // + nWidth = nHeight = 100; + } + if (nX == (int)CW_USEDEFAULT) + { + // + // Centre it on the screen for now - what else can we do? + // TODO: We could try FCF_SHELLPOSITION but it will require moving + // things around a bit. + // + wxSize vSizeDpy = wxGetDisplaySize(); - ::WinQueryWindowRect(HWND_DESKTOP, &vRect); - nY = vRect.yTop - (nY + nHeight); + nX = (vSizeDpy.x - nWidth) / 2; + nY = (vSizeDpy.y - nHeight) / 2; } + + // Convert to OS/2 coordinates + nY = GetOS2ParentHeight(pParent) - nY - nHeight; + if (!::WinSetWindowPos( m_hFrame ,HWND_TOP ,nX @@ -753,10 +788,6 @@ bool wxTopLevelWindowOS2::Show( bool bShow ) ::WinQueryWindowPos(m_hWnd, &vSwp); ::WinEnableWindow(m_hFrame, TRUE); - // - // Deal with children - // - MoveChildren(m_vSwpClient.cy - vSwp.cy); vEvent.SetEventObject(this); GetEventHandler()->ProcessEvent(vEvent); }