Creating a Browser Class (Windows Embedded CE 6.0)
1/6/2010
To create an Internet browser, you must define a class for the browser that inherits OLE interfaces to facilitate OLE activation. The following table shows the interfaces that the class must inherit:
Interface | Description |
---|---|
IOleContainer |
Used to enumerate objects in a compound document or to lock a container in the running state. Container and object applications both implement this interface. |
Primary means by which an embedded object obtains information about the location and the extent of its display site, moniker, user interface, and other resources that are provided by its container. |
|
IOleInPlaceSite |
Manages interaction between the container and the object's in-place client site. The client site is the display site for embedded objects, and provides position and conceptual information about the object. |
IOleControlSite |
Provides the methods that enable a site object to manage each embedded control in a container. A site object provides this interface and other site interfaces such as IOleClientSite and IOleInPlaceSite. When a control requires the services expressed through this interface, it will query one of the other client site interfaces for IOleControlSite. |
DWebBrowserEvents2 |
Designates an event sink interface that an application must implement in order to receive event notifications from a WebBrowser control or from the Internet Explorer application. |
The following code example shows a browser class, CBrowser, that implements the browser object.
class CBrowser :
public IOleContainer,
public IOleClientSite,
public IOleInPlaceSite,
public IOleControlSite,
public DWebBrowserEvents2
{
public:
// Declare new and delete clear allocators.
inline void * __cdecl operator new(size_t cb) { return LocalAlloc(LPTR, cb); }
inline void __cdecl operator delete(void * pv) { LocalFree(pv); }
// Constructor and Destructor
CBrowser();
~CBrowser();
//IUnknown methods
STDMETHOD(QueryInterface) (REFIID riid, LPVOID * ppv)
{
//QueryInterface for IoleContainer.
if ((riid == IID_IOleContainer) || (riid == IID_IUnknown))
{
RETAILMSG(1, (L"Browser QueryInterface for IOleContainer"));
*ppv = (IOleContainer *) this;
}
else if (...//Inerface)
{
...//Query Interface for other interfaces.
}
AddRef();
return S_OK;
}
STDMETHOD_(ULONG, AddRef) (void)
{
...
}
STDMETHOD_(ULONG, Release) (void)
{
...
}
...// IOleContainer methods
...// IOleClientSite methods
...// IOleWindow methods
...// IOleInPlaceSite methods
...// IOleControlSite methods
...// DWebBrowserEvents
...// IDispatch methods
// public methods
HRESULT StartBrowser(LPWSTR szURL); // Start a browser.
HRESULT NavigateToURL(LPWSTR szURL); // Browse to a URL.
void CloseBrowser(); // Close the browser.
//static WndProc wrapper and actual WndProc
static LRESULT CALLBACK s_BrowseWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT BrowseWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
private:
HRESULT CreateBrowserWindow(); // Create the main window.
HRESULT CreateBrowserObject(); // Create a web browser object.
HRESULT RegisterBrowserEventSink(); // Connect up the event sink
// private members
HWND _hWnd; //The main window
IoleObject *_pObject; // The browser object
IConnectionPoint *_pCP; // Pointer to the browser event connection-point (for DWebBrowserEvents2)
IWebBrowser2 *_pWB2; // Pointer to the Web browser object
BOOL _bInPlaceActive; // Determines if the document is active
DWORD _dwEventCookie; // Stores cookies that will be received when the
// browser registers to receive DWebBrowserEvents2
ULONG _ulRefs; //reference count for the interfaces supported by the
//container.
};
See Also
Concepts
Creating an Internet Browser
Registering the Browser Window