How To Obtain Width and Height Supplied to Window.open Inside the Visual C++ WebBrowser Host (259963)



The information in this article applies to:

  • Microsoft Internet Explorer (Programming) 4.0
  • Microsoft Internet Explorer (Programming) 4.01
  • Microsoft Internet Explorer (Programming) 4.01 SP1
  • Microsoft Internet Explorer (Programming) 4.01 SP2
  • Microsoft Internet Explorer (Programming) 5
  • Microsoft Internet Explorer (Programming) 5.01
  • Microsoft Internet Explorer (Programming) 5.5

This article was previously published under Q259963

SUMMARY

C++ applications that host the WebBrowser control can catch a window.open() call that is generated from script by handling the NewWindow2 event on the DWebBrowserEvents2 interface. However, it is not immediately obvious how your application can obtain the width and height values passed to the features argument of window.open() so that the WebBrowser host can resize the window correctly.

MORE INFORMATION

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;
}
				

REFERENCES

For more information about developing Web-based solutions for Microsoft Internet Explorer, visit the following Microsoft Web sites:

Modification Type:MajorLast Reviewed:5/11/2006
Keywords:kbhowto kbWebBrowser KB259963