您的位置:首页 > 其它

获取对话框中的控件指针

2010-05-13 11:09 357 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: