Your WebBrowser control container must implement the OnPosRectChange() method of the IOleInPlaceSite interface. The WebBrowser control will call this method on its host shortly after instantiating the new window.
Developers who insert a WebBrowser control directly onto a Microsoft Foundation Classes (MFC) dialog box have this functionality provided for them by MFC. Active Template Library (ATL) developers and MFC developers who write their own hosting code must implement this themselves.
The following ATL code resizes both the WebBrowser control and its containing window to fit the parameters supplied to window.open(). The code assumes your WebBrowser control host is derived from ATL's CWindow class.
STDMETHODIMP OnPosRectChange(LPCRECT lprcPosRect) {
CComQIPtr<IOleInPlaceObject> ieIP;
HRESULT hr = S_OK;
ATLTRACE("new width and height for this WebOC instance are %d and %d\n", lprcPosRect->right, lprcPosRect->bottom);
if (webOC) {
ieIP = webOC;
if (ieIP) {
hr = ieIP->SetObjectRects(lprcPosRect, lprcPosRect);
if (SUCCEEDED(hr) {
// Change the height of the window to match the webOC's height.
// ResizeClient() calls the Win32 function
// Set WindowPos()
BOOL bRet = ResizeClient(lprcPosRect->right, lprcPosRect->bottom, TRUE);
if (!bRet) {
hr = E_FAIL;
}
}
} else {
hr = E_FAIL;
}
}
return hr;
}