BOOL CInPlaceFrame::CanGetBorderSpace( LPCRECT lpRectBorder, LPOLEINPLACEUIWINDOW lpUIWindow, BOOL bFrame) { ASSERT_VALID(this); ASSERT(lpRectBorder == NULL || AfxIsValidAddress(lpRectBorder, sizeof(RECT), FALSE)); ASSERT(lpUIWindow != NULL); // use IOleInPlaceUIWindow::GetBorder if no border given CRect rectBorder; if (lpRectBorder != NULL) rectBorder.CopyRect(lpRectBorder); else lpUIWindow->GetBorder(&rectBorder); // get CWnd* for the OLE window HWND hwnd; VERIFY(lpUIWindow->GetWindow(&hwnd) == NOERROR); CWnd* pWnd = CWnd::FromHandle(hwnd); ASSERT(pWnd != NULL); // see how much space we need by calling reposition bars CRect rectNeeded = rectBorder; pWnd->RepositionBars(0, 0xFFFF, 0, CWnd::reposQuery, &rectNeeded, &rectBorder); CRect rectRequest; // request the border space from the container rectRequest.SetRect( rectNeeded.left - rectBorder.left, rectNeeded.top - rectBorder.top, rectBorder.right - rectNeeded.right, rectBorder.bottom - rectNeeded.bottom); CRect rectTemp; rectTemp = rectRequest; // if no border space, just call SetBorderSpace if (rectRequest.IsRectNull()) goto RequestFailed; if (lpUIWindow->RequestBorderSpace(&rectTemp) != NOERROR) goto RequestFailed; return TRUE; RequestFailed: return FALSE; }