Chinaunix首页 | 论坛 | 博客
  • 博客访问: 194795
  • 博文数量: 90
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2017-08-23 16:48
文章分类

全部博文(90)

文章存档

2015年(1)

2011年(21)

2010年(59)

2009年(9)

我的朋友

分类: C/C++

2010-07-14 10:23:58

基本上翻译自以下两文

一. 获得所在IE页面的URL
1.    获得IOleClientSite接口指针
2.    调用IOleClientSite::GetMoniker()获得client site的moniker对象指针
3.    调用IMoniker::GetDisplayName()获得当前文档的URL
下面是ATL中获得URL的例程,这里是在SetClientSite中获得,可以在其它任何时候获得
STDMETHOD(SetClientSite)(IOleClientSite *pClientSite){   if (pClientSite != NULL)   {      // Obtain URL from container moniker.      CComPtr spmk;      LPOLESTR pszDisplayName;      if (SUCCEEDED(pClientSite->GetMoniker(                                    OLEGETMONIKER_TEMPFORUSER,                                    OLEWHICHMK_CONTAINER,                                    &spmk)))      {         if (SUCCEEDED(spmk->GetDisplayName(                                 NULL, NULL, &pszDisplayName)))         {            USES_CONVERSION;            CComBSTR bstrURL;            bstrURL = pszDisplayName;            ATLTRACE("The current URL is %s\n", OLE2T(bstrURL));            CoTaskMemFree((LPVOID)pszDisplayName);         }      }   }   return IOleObject_SetClientSite(pClientSite);}在MFC中,可以重载COleControl::OnSetClientSite在设置ClientSite时就获得URL
void CMyCtrl::OnSetClientSite(){    LPOLECLIENTSITE pClientSite = GetClientSite();    ......//其它同上。}
二.   访问所在文档的对象模型,即document,element等等东西
1.   获得IWebBrowserApp,使用
a.使用IOleClientSite接口获得IServiceProvider接口CComQIPtr pISP;pClientSite->QueryInterface(IID_IServiceProvider,                          (void **)&pISP);b.使用IServiceProvider接口获得IWebBrowserApp接口pISP->QueryService(SID_SWebBrowserApp, IID_IWebBrowserApp,                        (void **)&pIWebBrowserApp));对于IE4或以后版本,也可以获得IWebBrowserApp2接口pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,     (void **)&pIWebBrowser2));2.使用IWebBrowserApp获得文档(document)对象,接着是其它对象。
 
阅读(3059) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~