Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

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


View products that this article applies to.

This article was previously published under Q259963

↑ Back to the top


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.

↑ Back to the top


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

↑ Back to the top


References

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

↑ Back to the top


Keywords: KB259963, kbwebbrowser, kbhowto

↑ Back to the top

Article Info
Article ID : 259963
Revision : 3
Created on : 5/11/2006
Published on : 5/11/2006
Exists online : False
Views : 611