获取对话框中的控件指针

1. 采用GetDlgControl获取控件指针;

[cpp]  view plain copy
  1. //以IE控件为例  
  2. CComPtr<IWebBrowser2> spIWebBrowser2;  
  3.   
  4. GetDlgControl(IDC_EXPLORER,IID_IWebBrowser2,(void **)&spIWebBrowser2);  

2. 通过AtlAxGetControl获取控件指针;

[cpp]  view plain copy
  1. //GetDlgControl函数封装了以下实现  
  2. HWND hWnd;  
  3. HRESULT hr;  
  4. CComPtr<IUnknown> spUnk;  
  5. CComPtr<IWebBrowser2> spWebBrowser2;  
  6. hWnd = GetDlgItem(IDC_EXPLORER);  
  7. if (hWnd != NULL){  
  8.   hr = AtlAxGetControl(hWnd, &spUnk);  
  9.   if (SUCCEEDED(hr))  
  10.   {  
  11.     hr = spUnk ->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser2);  
  12.   }  
  13. }  

 3. 以上均为ATL工程, 下面介绍MFC下的获取

[cpp]  view plain copy
  1. CComPtr<IWebBrowser2> m_spWebBrowser2;  
  2. {  
  3. //直接创建IWebBrowser2接口  
  4. CoInitialize(NULL);  
  5. //CLSID_WebBrowser, 是微软web预览控件的实现类的id,它同过属性Parent来得到窗口句柄,因为控件没法知道它被放在哪个容器里,所以不会实现HWND属性!   
  6. CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC, IID_IWebBrowser2, (void**)&m_spWebBrowser2);  
  7. //CLSID_InternetExplorer,是微软ie浏览器自动化实现类的id,它通过属性HWND得到!因为得到句柄一定封装好了  
  8. CoCreateInstance(CLSID_InternetExplorer,  
  9. NULL,CLSCTX_INPROC,IID_IWebBrowser2,(void**)&m_pWebBrowser2);  
  10. }  
  11. //MFC下插入Web Browser控件, 获取IWebBrowser  
  12. int GetDlgIEControl(int nID)  
  13. {  
  14.     if (m_spWebBrowser2 == NULL){  
  15.         CWnd *pCWnd = GetDlgItem(IDC_EXPLORER);  
  16.         if (pCWnd != NULL){  
  17.             HRESULT hr;  
  18.             CComPtr<IUnknown> spUnk;  
  19.             spUnk = NULL;  
  20.             //using atl  
  21.             //hr = AtlAxGetControl(pCWnd->GetSafeHwnd(), &spUnk);  
  22.             spUnk = pCWnd ->GetControlUnknown();  
  23.             if (spUnk != NULL)  
  24.             {  
  25.                 hr = spUnk ->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser2);  
  26.                 return 1;  
  27.             }  
  28.         }  
  29.     }  
  30.     return 0;  
  31. }  

你可能感兴趣的:(获取对话框中的控件指针)