1. 采用GetDlgControl获取控件指针; //以IE控件为例 CComPtr<IWebBrowser2> spIWebBrowser2; GetDlgControl(IDC_EXPLORER,IID_IWebBrowser2,(void **)&spIWebBrowser2); 2. 通过AtlAxGetControl获取控件指针; //GetDlgControl函数封装了以下实现 HWND hWnd; HRESULT hr; CComPtr<IUnknown> spUnk; CComPtr<IWebBrowser2> spWebBrowser2; hWnd = GetDlgItem(IDC_EXPLORER); if (hWnd != NULL){ hr = AtlAxGetControl(hWnd, &spUnk); if (SUCCEEDED(hr)) { hr = spUnk ->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser2); } } 3. 以上均为ATL工程, 下面介绍MFC下的获取 CComPtr<IWebBrowser2> m_spWebBrowser2; { //直接创建IWebBrowser2接口 CoInitialize(NULL); //CLSID_WebBrowser, 是微软web预览控件的实现类的id,它同过属性Parent来得到窗口句柄,因为控件没法知道它被放在哪个容器里,所以不会实现HWND属性! CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC, IID_IWebBrowser2, (void**)&m_spWebBrowser2); //CLSID_InternetExplorer,是微软ie浏览器自动化实现类的id,它通过属性HWND得到!因为得到句柄一定封装好了 CoCreateInstance(CLSID_InternetExplorer, NULL,CLSCTX_INPROC,IID_IWebBrowser2,(void**)&m_pWebBrowser2); } //MFC下插入Web Browser控件, 获取IWebBrowser int GetDlgIEControl(int nID) { if (m_spWebBrowser2 == NULL){ CWnd *pCWnd = GetDlgItem(IDC_EXPLORER); if (pCWnd != NULL){ HRESULT hr; CComPtr<IUnknown> spUnk; spUnk = NULL; //using atl //hr = AtlAxGetControl(pCWnd->GetSafeHwnd(), &spUnk); spUnk = pCWnd ->GetControlUnknown(); if (spUnk != NULL) { hr = spUnk ->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser2); return 1; } } } return 0; }