CComQIPtr<IWebBrowser2> m_spBrowser;
CAxWindow content_wnd;
......
if(  _tcslen(m_tcHtmlFileName) > 0 )
{
RECT rc;
GetClientRect( &rc );
if(m_spBrowser==NULL)
{
LPOLESTR pstrbrowserid;
StringFromCLSID(IID_IWebBrowser2,&pstrbrowserid);
_bstr_t bstrbrowser(pstrbrowserid);
CoTaskMemFree(pstrbrowserid);
if(content_wnd.IsWindow())
content_wnd.DestroyWindow();
content_wnd.Create( m_hWnd, rc, LPCTSTR(bstrbrowser), WS_CHILD&brvbar;WS_VISIBLE&brvbar;WS_HSCROLL&brvbar;WS_VSCROLL );//create a browser control
HRESULT hrbrowser;
hrbrowser = content_wnd.QueryControl( IID_IWebBrowser2, reinterpret_cast<void**>(&m_spBrowser) );
}

解决方案 »

  1.   

    ActiveX是COM的一些标准接口的集合,当然这个标准是M$指定的,也就是说ActiveX的使用和使用COM的方法是一样,但另一方面,一个COM的组件不一定是一个ActiveX组件。通常一个COM组件的使用分三种方式,一,纯C++的方式(我最喜欢),二,ATL的方式(简洁,高效),三,MFC方式(所有COM涉及的主题均可实现,并且是GUI-rich的)。所以如果你会这三种方法中的任何一种,你便可以在COM中使用ActiveX.