X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f23208caccf81b0b34c5c11b466c6bd64fdf0f9d..2035e10e83324c6925d12725b842768f6e2b00a2:/src/os2/frame.cpp?ds=inline diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp index 0adff13a4b..0643f20c5b 100644 --- a/src/os2/frame.cpp +++ b/src/os2/frame.cpp @@ -339,31 +339,60 @@ void wxFrame::DoGetPosition( // ---------------------------------------------------------------------------- void wxFrame::DoShowWindow( - int nShowCmd + int bShowCmd ) { - ::WinShowWindow(GetHwnd(), nShowCmd); - m_bIconized = nShowCmd == SWP_MINIMIZE; + HWND hClient; + HWND hTitlebar = NULLHANDLE; + HWND hHScroll = NULLHANDLE; + HWND hVScroll = NULLHANDLE; + HWND hMenuBar = NULLHANDLE; + SWP vSwp; + SWP vSwpTitlebar; + SWP vSwpVScroll; + SWP vSwpHScroll; + SWP vSwpMenu; + + // + // Send anything to initialize the frame + // + WinQueryWindowPos(GetHwnd(), &vSwp); + hClient = WinWindowFromID(GetHwnd(), FID_CLIENT); + hTitlebar = WinWindowFromID(GetHwnd(), FID_TITLEBAR); + WinQueryWindowPos(hTitlebar, &vSwpTitlebar); + hHScroll = WinWindowFromID(GetHwnd(), FID_HORZSCROLL); + WinQueryWindowPos(hHScroll, &vSwpHScroll); + hVScroll = WinWindowFromID(GetHwnd(), FID_VERTSCROLL); + WinQueryWindowPos(hVScroll, &vSwpVScroll); + hMenuBar = WinWindowFromID(GetHwnd(), FID_MENU); + WinQueryWindowPos(hMenuBar, &vSwpMenu); + WinSetWindowPos( hClient + ,HWND_TOP + ,SV_CXSIZEBORDER + ,(SV_CYSIZEBORDER - 1) + vSwpHScroll.cy + ,vSwp.cx - ((SV_CXSIZEBORDER * 2) + vSwpVScroll.cx) + ,vSwp.cy - ((SV_CYSIZEBORDER * 2) + 1 + vSwpTitlebar.cy + vSwpMenu.cy + vSwpHScroll.cy) + ,SWP_SIZE | SWP_MOVE + ); + ::WinShowWindow(GetHwnd(), (BOOL)bShowCmd); + ::WinShowWindow(hClient, (BOOL)bShowCmd); } // end of wxFrame::DoShowWindow bool wxFrame::Show( bool bShow ) { - DoShowWindow(bShow ? SWP_SHOW : SWP_HIDE); + SWP vSwp; + + DoShowWindow((int)bShow); if (bShow) { wxActivateEvent vEvent(wxEVT_ACTIVATE, TRUE, m_windowId); - ::WinSetWindowPos( (HWND) GetHWND() - ,HWND_TOP - ,0 - ,0 - ,0 - ,0 - ,SWP_ZORDER - ); + ::WinQueryWindowPos(GetHwnd(), &vSwp); + m_bIconized = vSwp.fl & SWP_MINIMIZE; + ::WinEnableWindow(GetHwnd(), TRUE); vEvent.SetEventObject(this); GetEventHandler()->ProcessEvent(vEvent); } @@ -376,15 +405,18 @@ bool wxFrame::Show( { HWND hWndParent = GetHwndOf(GetParent()); + ::WinQueryWindowPos(hWndParent, &vSwp); + m_bIconized = vSwp.fl & SWP_MINIMIZE; if (hWndParent) ::WinSetWindowPos( hWndParent ,HWND_TOP - ,0 - ,0 - ,0 - ,0 - ,SWP_ZORDER + ,vSwp.x + ,vSwp.y + ,vSwp.cx + ,vSwp.cy + ,SWP_ZORDER | SWP_ACTIVATE | SWP_SHOW | SWP_MOVE ); + ::WinEnableWindow(hWndParent, TRUE); } } return TRUE; @@ -438,11 +470,11 @@ void wxFrame::SetIcon( { wxFrameBase::SetIcon(rIcon); - if (m_icon.Ok()) + if ((m_icon.GetHICON()) != NULLHANDLE) { ::WinSendMsg( GetHwnd() ,WM_SETICON - ,(MPARAM)((HICON)m_icon.GetHICON()) + ,(MPARAM)((HPOINTER)m_icon.GetHICON()) ,NULL ); ::WinSendMsg( GetHwnd() @@ -730,16 +762,23 @@ bool wxFrame::OS2Create( HWND hTitlebar = NULLHANDLE; HWND hHScroll = NULLHANDLE; HWND hVScroll = NULLHANDLE; + HWND hMenuBar = NULLHANDLE; + HWND hMenu1 = NULLHANDLE; + HWND hMenu2 = NULLHANDLE; + HWND hFrame = NULLHANDLE; SWP vSwp; SWP vSwpTitlebar; SWP vSwpVScroll; SWP vSwpHScroll; + SWP vSwpMenu; + RGB2 vRgb; m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON); memset(&vSwp, '\0', sizeof(SWP)); memset(&vSwpTitlebar, '\0', sizeof(SWP)); memset(&vSwpVScroll, '\0', sizeof(SWP)); memset(&vSwpHScroll, '\0', sizeof(SWP)); + if (pParent) hParent = GetWinHwnd(pParent); else @@ -827,8 +866,8 @@ bool wxFrame::OS2Create( // Create the client window. We must call the API from here rather than // the static base class create because we need a separate handle // - if ((hClient = ::WinCreateWindow( GetHwnd() // Frame is parent - ,zWclass // Custom client class + if ((hClient = ::WinCreateWindow( hFrame // Frame is parent + ,wxFrameClassName ,NULL // Window title ,0 // No styles ,0, 0, 0, 0 // Window position @@ -841,11 +880,19 @@ bool wxFrame::OS2Create( { return FALSE; } + // + // Send anything to initialize the frame + // + ::WinSendMsg( hFrame + ,WM_UPDATEFRAME + ,(MPARAM)FCF_TASKLIST + ,(MPARAM)0 + ); // // Now size everything. If adding a menu the client will need to be resized. // - if (!::WinSetWindowPos( GetHwnd() + if (!::WinSetWindowPos( hFrame ,HWND_TOP ,nX ,nY @@ -855,21 +902,34 @@ bool wxFrame::OS2Create( )) return FALSE; - WinQueryWindowPos(GetHwnd(), &vSwp); + WinQueryWindowPos(hFrame, &vSwp); + // + // Set the client window's background, otherwise it is transparent! + // + wxColour vColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW); + + vRgb.bRed = (BYTE)vColour.Red(); + vRgb.bGreen = (BYTE)vColour.Green(); + vRgb.bBlue = (BYTE)vColour.Blue(); + WinSetPresParam( hClient + ,PP_BACKGROUNDCOLOR + ,(ULONG)sizeof(RGB2) + ,(PVOID)&vRgb + ); if (ulCreateFlags & FCF_TITLEBAR) { - hTitlebar = WinWindowFromID(GetHwnd(), FID_TITLEBAR); + hTitlebar = WinWindowFromID(hFrame, FID_TITLEBAR); WinQueryWindowPos(hTitlebar, &vSwpTitlebar); } if (ulCreateFlags & FCF_HORZSCROLL) { - hHScroll = WinWindowFromID(GetHwnd(), FID_HORZSCROLL); + hHScroll = WinWindowFromID(hFrame, FID_HORZSCROLL); WinQueryWindowPos(hHScroll, &vSwpHScroll); } if (ulCreateFlags & FCF_VERTSCROLL) { - hVScroll = WinWindowFromID(GetHwnd(), FID_VERTSCROLL); + hVScroll = WinWindowFromID(hFrame, FID_VERTSCROLL); WinQueryWindowPos(hVScroll, &vSwpVScroll); } if (!::WinSetWindowPos( hClient @@ -881,6 +941,8 @@ bool wxFrame::OS2Create( ,SWP_SIZE | SWP_MOVE )) return FALSE; + WinQueryWindowPos(hClient, &vSwp); + ::WinShowWindow(hClient, TRUE); return TRUE; } // end of wxFrame::OS2Create