Internet Explorer 3+ comes with a Web Browser ActiveX
control that you can use to add HTML viewing capabilities to your application.
In fact, IExplore.exe is a very small application that is simply a host
for this control. The most important interface that is used to interact
with it is IWebBrowser, declared in the exdisp.h file that
is included with Visual C 5.0. The newer IWebBrowser2 interface
adds a few new methods but is only supported by Internet Explorer 4, and
its definition is not included with Visual C 5.0. However you can use Developer
Studio to generate a wrapper class for it.
The Visual C 5.0 uuid.lib doesnt include the definition
of IID_IWebBrowser and CLSID_WebBrowser, but these GUIDs can be easly found
in exdisp.h or the registry. This is what I came up this:
/* EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B
*/
IID const IID_IWebBrowser={0xEAB22AC1,
0x30C1, 0x11CF, 0xA7, 0xEB, 0x00, 0x00, 0xC0, 0x5B, 0xAE, 0x0B};
/* 8856F961-340A-11D0-A96B-00C04FD705A2
*/
CLSID const CLSID_WebBrowser={0x8856F961,
0x340A, 0x11D0, 0xA9, 0x6B, 0x00, 0xC0, 0x4F, 0xD7, 0x05, 0xA2};
You can use an ActiveX control in you application by using
CWnd::CreateControl. Make sure that you call AfxEnableControlContainer()
in your CWinApp::InitInstance(). After you created it you can use
CWnd::GetControlUnknown to retreive the controls IUnknown and then you
can QueryInterface it for IID_IWebBrowser.
m_wndBrowser.CreateControl(CLSID_WebBrowser,
lpszWindowName, WS_VISIBLE|WS_CHILD, rect, this, AFX_IDW_PANE_FIRST);
IUnknown *pUnk=m_wndBrowser.GetControlUnknown();
IWebBrowser *pBrowser;
HRESULT hr=pUnk->QueryInterface(IID_IWebBrowser,
(void **)&pBrowser);
After the control is set up you can use the Navigate
method to browse a page.
CString url(“http://www.microsoft.com/”);
BSTR bUrl=url.AllocSysString();
COleVariant vNull(LPCTSTR)NULL,
VT_BSTR);
hr=pBrowser->Navigate(bUrl, &vNull,
&VNull, &vNull, &vNull);
The example I wrote views a web page in a MDI child window.
Click here to download it. For more information
on this control download the Internet Client SDK documentation that is
available at Microsofts web site.