X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3d407edab0eebcda0f5df070d57d5f8f8e3a9881..281b0186b81a35b3eff658635b083b04a3cfa23c:/src/os2/frame.cpp diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp index 44a4888de1..f3c22d5db5 100644 --- a/src/os2/frame.cpp +++ b/src/os2/frame.cpp @@ -343,8 +343,37 @@ void wxFrame::DoShowWindow( ) { HWND hClient; + HWND hTitlebar = NULLHANDLE; + HWND hHScroll = NULLHANDLE; + HWND hVScroll = NULLHANDLE; + HWND hMenuBar = NULLHANDLE; + SWP vSwp; + SWP vSwpTitlebar; + SWP vSwpVScroll; + SWP vSwpHScroll; + SWP vSwpMenu; - hClient = ::WinWindowFromID(GetHwnd(), FID_CLIENT); + // + // 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 @@ -363,14 +392,7 @@ bool wxFrame::Show( ::WinQueryWindowPos(GetHwnd(), &vSwp); m_bIconized = vSwp.fl & SWP_MINIMIZE; - ::WinSetWindowPos( (HWND) GetHWND() - ,HWND_TOP - ,vSwp.x - ,vSwp.y - ,vSwp.cx - ,vSwp.cy - ,SWP_ZORDER | SWP_ACTIVATE | SWP_SHOW | SWP_MOVE - ); + ::WinEnableWindow(GetHwnd(), TRUE); vEvent.SetEventObject(this); GetEventHandler()->ProcessEvent(vEvent); } @@ -394,6 +416,7 @@ bool wxFrame::Show( ,vSwp.cy ,SWP_ZORDER | SWP_ACTIVATE | SWP_SHOW | SWP_MOVE ); + ::WinEnableWindow(hWndParent, TRUE); } } return TRUE; @@ -529,6 +552,9 @@ void wxFrame::SetMenuBar( wxMenuBar* pMenuBar ) { + ERRORID vError; + wxString sError; + if (!pMenuBar) { DetachMenuBar(); @@ -555,6 +581,22 @@ void wxFrame::SetMenuBar( return; } + // + // Set the parent and owner of the menubar to be the frame + // + if (!::WinSetParent(m_hMenu, GetHwnd(), FALSE)) + { + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); + wxLogError("Error setting parent for submenu. Error: %s\n", sError); + } + + if (!::WinSetOwner(m_hMenu, GetHwnd())) + { + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); + wxLogError("Error setting parent for submenu. Error: %s\n", sError); + } InternalSetMenuBar(); m_frameMenuBar = pMenuBar; @@ -739,16 +781,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 @@ -836,8 +885,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 @@ -853,7 +902,7 @@ bool wxFrame::OS2Create( // // Send anything to initialize the frame // - ::WinSendMsg( GetHwnd() + ::WinSendMsg( hFrame ,WM_UPDATEFRAME ,(MPARAM)FCF_TASKLIST ,(MPARAM)0 @@ -862,7 +911,7 @@ bool wxFrame::OS2Create( // // Now size everything. If adding a menu the client will need to be resized. // - if (!::WinSetWindowPos( GetHwnd() + if (!::WinSetWindowPos( hFrame ,HWND_TOP ,nX ,nY @@ -872,21 +921,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 @@ -898,6 +960,8 @@ bool wxFrame::OS2Create( ,SWP_SIZE | SWP_MOVE )) return FALSE; + WinQueryWindowPos(hClient, &vSwp); + ::WinShowWindow(hClient, TRUE); return TRUE; } // end of wxFrame::OS2Create