74b102c0f4d1d7ca7fc10f80bae971a5.png

给接口添加一个方法:

方法名:SetClientSite

参数:IOleClientSite* pClientSite

2——

给上面的方法加以实现(在相应的类中实现,已经自动生成了框架):

STDMETHODIMP CIrDav::SetClientSite(IOleClientSite * pClientSite)

{

// TODO: 在此添加实现代码

HRESULT hr = S_OK;

IServiceProvider *isp, *isp2 = NULL;

if (!pClientSite)

{

COMRELEASE(m_spBrowser);

}

else

{

try

{

hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast(&isp));

if (FAILED(hr))

throw("");

hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast(&isp2));

if (FAILED(hr))

throw("");

hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast(&m_spBrowser));

if (FAILED(hr))

throw("");

hr=this->m_spBrowser->get_Document((IDispatch**)&m_spDoc);

if(FAILED(hr))

throw("");

}

catch(LPCTSTR lpszErr)

{

if(CString(lpszErr)!="")

MessageBox(lpszErr);

hr=S_OK;

}

catch(...)

{

MessageBox("未知错误");

hr=S_OK;

}

COMRELEASE(isp);

COMRELEASE(isp2);

}

return hr;

}

通过这步的操作,我们就获得了控件所在Web页面的BROWSER对象指针和相应的DOCUMENT对象指针。

通过这些BROWSER和DOCUMENT对象指针,我们可以设置窗口的很多属性,比如菜单、全屏、工具栏等的显示和DOCUMENT的背景颜色等等。

这个方法参见MSDN:http://support.microsoft.com/support/kb/articles/Q257/7/17.ASP

3——

获得脚本,通过m_spDoc(DOCUMENT对象)的方法get_Script可以获得页面中的脚本对象:

CComPtr pScript;

hr=this->m_spDoc->get_Script(&pScript);

4——

检索函数,使用上面脚本对象的GetIDsOfNames可以获取页面之中指定名的脚本函数的指针:

CComBSTR bstrMember("calert");

DISPID dispid;

hr=pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);

5——

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐