void COleClientItem::OnDeactivateUI(BOOL /*bUndoable*/) { ASSERT_VALID(this); // notify the item of the state change if (m_nItemState != activeState) { OnChange(OLE_CHANGED_STATE, (DWORD)activeState); m_nItemState = activeState; } if (m_pView != NULL && m_pDocument->GetFirstViewPosition()) { // restore container window's WS_CLIPCHILDREN bit... ASSERT_VALID(m_pView); m_pView->ModifyStyle(WS_CLIPCHILDREN, m_dwContainerStyle & WS_CLIPCHILDREN); } // restore original user interface on the frame window CFrameWnd* pMainFrame; CFrameWnd* pDocFrame = NULL; if (OnGetWindowContext(&pMainFrame, &pDocFrame, NULL)) { ASSERT_VALID(pMainFrame); pMainFrame->DelayUpdateFrameTitle(); if (pMainFrame->NegotiateBorderSpace(CFrameWnd::borderSet, NULL)) pMainFrame->DelayRecalcLayout(); // restore original user interface on the document window if (pDocFrame != NULL) { pDocFrame->DelayUpdateFrameTitle(); if (pDocFrame->NegotiateBorderSpace(CFrameWnd::borderSet, NULL)) pDocFrame->DelayRecalcLayout(); } } // cleanup frame interfaces allocated in GetWindowContext if (m_pInPlaceFrame != NULL) { OnShowControlBars(m_pInPlaceFrame->m_pFrameWnd, TRUE); // release OLE frame window hooks and allow menu update ::OleSetMenuDescriptor(NULL, m_pInPlaceFrame->m_pFrameWnd->m_hWnd, NULL, NULL, NULL); if (m_pInPlaceDoc != NULL) { ::OleSetMenuDescriptor(NULL, m_pInPlaceDoc->m_pFrameWnd->m_hWnd, NULL, NULL, NULL); } m_pInPlaceFrame->m_pFrameWnd->DelayUpdateFrameMenu(NULL); // unhook from frame window if (m_pInPlaceFrame->m_pFrameWnd->m_pNotifyHook == m_pInPlaceFrame) m_pInPlaceFrame->m_pFrameWnd->m_pNotifyHook = NULL; // cleanup document interfaces allocated in GetWindowContext if (m_pInPlaceDoc != NULL) { OnShowControlBars(m_pInPlaceDoc->m_pFrameWnd, TRUE); // unhook from frame window if (m_pInPlaceDoc->m_pFrameWnd->m_pNotifyHook == m_pInPlaceDoc) m_pInPlaceDoc->m_pFrameWnd->m_pNotifyHook = NULL; } } // reset server HWND -- no longer necessary m_hWndServer = NULL; CWnd* pWnd = AfxGetMainWnd(); if (pWnd != NULL) { // set focus back to the container pWnd = pWnd->GetTopLevelParent(); ASSERT_VALID(pWnd); if (::GetActiveWindow() == pWnd->m_hWnd) pWnd->SetFocus(); } }
///////////////////////////////////////////////////////////////////////////// // CBCGPOleServerDoc commands void CBCGPOleServerDoc::OnResizeBorder( LPCRECT lpRectBorder, LPOLEINPLACEUIWINDOW lpUIWindow, BOOL bFrame ) { ASSERT_VALID (this); ASSERT (lpUIWindow != NULL); if (!bFrame) { COleServerDoc::OnResizeBorder (lpRectBorder, lpUIWindow, bFrame); return; } CBCGPOleCntrFrameWnd* pMainFrame = NULL; CBCGPOleDocIPFrameWnd* p_IpDocFrame = DYNAMIC_DOWNCAST(CBCGPOleDocIPFrameWnd, m_pInPlaceFrame); if (p_IpDocFrame != NULL) { pMainFrame = p_IpDocFrame->GetContainerFrameWindow (); } else { CBCGPOleIPFrameWnd* p_IpFrame = DYNAMIC_DOWNCAST (CBCGPOleIPFrameWnd, m_pInPlaceFrame); if (p_IpFrame != NULL) { pMainFrame = p_IpFrame->GetContainerFrameWindow (); } else { return; } } if (pMainFrame == NULL) { return; } CBCGPDockManager* pDockManager = pMainFrame->GetDockManager (); ASSERT_VALID (pDockManager); CRect rcCurBorders; if (lpRectBorder == NULL) { if (lpUIWindow->GetBorder(&rcCurBorders) != S_OK) { lpUIWindow->SetBorderSpace (NULL); return; } } else { rcCurBorders = *lpRectBorder; } if (AfxGetThread()->m_pActiveWnd == m_pInPlaceFrame) OnShowControlBars(pMainFrame, TRUE); pDockManager->m_rectInPlace = rcCurBorders; pDockManager->AdjustDockingLayout (); CRect rectClient = pDockManager->GetClientAreaBounds (); CRect rectRequest ( abs (rectClient.left - rcCurBorders.left), abs (rectClient.top - rcCurBorders.top), abs (rectClient.right - rcCurBorders.right), abs (rectClient.bottom - rcCurBorders.bottom)); // v.8.6 removed -1 to make it work in Excel CRect rectTemp; rectTemp = rectRequest; if (!rectRequest.IsRectNull() || lpUIWindow->RequestBorderSpace(&rectTemp) == S_OK) { lpUIWindow->SetBorderSpace (&rectRequest); pDockManager->AdjustDockingLayout (); } else { OnShowControlBars (pMainFrame, FALSE); CRect rect (0,0,0,0); lpUIWindow->SetBorderSpace(&rect); } }