利用VC 在WinCE下显示网页
对于显示网页想到了用IE Browser 但是最终写的时候发现,用那个控件出了好多问题,后来参看网上的做法利用IWebBrowser2 DCOM组件但是发现噩梦远没有结束
实现代码
添加变量
- IWebBrowser2 *m_pBrowser;//组件
- CWnd m_wndBrowser;//容纳组件的容器
在Initdialog中添加
- CoUninitialize();//这句非常重要,网上示例中没有这句我的噩梦就是由此而来
- if(!m_wndBrowser.CreateControl(CLSID_WebBrowser, NULL, WS_VISIBLE | WS_CHILD,
- rect, this, AFX_IDW_PANE_FIRST))
- {
- return FALSE;
- }
- LPUNKNOWN lpUnk = m_wndBrowser.GetControlUnknown();
- if(lpUnk==NULL)
- {
- m_wndBrowser.DestroyWindow();
- return FALSE;
- }
- HRESULT hr = lpUnk->QueryInterface(IID_IWebBrowser2, (void**) &m_pBrowser);
- if (! SUCCEEDED(hr))
- {
- m_pBrowser = NULL;
- m_wndBrowser.DestroyWindow();
- return FALSE;
- }
在创建控件前之所以添加CoUninitialize(); 在这里CreateControl 自动调用了AtlOleInitialize对于关闭所加载的DCOM库,防止在其他程序或者类库中调用了DCOM设置的模式不一样,而引发问题,在没有加这句话时候引发了这个导致程序终止的原因,原因是我一个做视频采集的类中用到了drictshow 而在他的初始化中设置的模式为多线程模式,所以引起冲突造成程序异常终止,同时添加这个方法,来定向相应的网页
- void CAssistMachinceDlg::Navigate(CString url)
- {
- COleVariant empty;
- BSTR bstrURL = url.AllocSysString();
- HRESULT result;
- result=m_pBrowser->Navigate (bstrURL, COleVariant((long) 0, VT_I4), empty, empty, empty);
- if (!SUCCEEDED(result))
- {
- MessageBox(_T("Open failture"));
- }
- }
注意:建立工程时要勾选winsock,Activex选项