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;
- }