サイトのインターフェースポインタ(*)から、IWebBrowser2Ptrを取得

* : HTMLの<OBJECT>タグでよって生成された場合、IObjectWithSite::SetSite()やIOleObject::SetClientSite()によって渡される
サイトのインターフェースポインタ
(2004.11.29)
#include <shlguid.h>                            // SID_SWebBrowserApp
 
 
    // Internet ExplorerのIWebBrowser2を、取得する
    //#define SID_SInternetExplorer IID_IWebBrowserApp
    //#define SID_SWebBrowserApp    IID_IWebBrowserApp
    static IWebBrowser2Ptr QueryWebBrowserApp(IUnknown *punk)
    {
        return InternalQueryService<IWebBrowser2Ptr>(punk, SID_SWebBrowserApp);
    }
    //#define SID_IBindHost IID_IBindHost
    //#define SID_SBindHost IID_IBindHost
    static IBindHostPtr QueryBindHost(IUnknown *punk)
    {
        return InternalQueryService<IBindHostPtr>(punk, SID_SBindHost);
    }
    static IDownloadManagerPtr QueryDownloadManager(IUnknown *punk)
    {
        return InternalQueryService<IDownloadManagerPtr>(punk, SID_SDownloadManager);
    }
    //#define SID_SInternetSecurityManager         IID_IInternetSecurityManager
    static InternetSecurityManagerPtr QueryInternetSecurityManager(IUnknown *punk)
    {
        return InternalQueryService<InternetSecurityManagerPtr>(punk, SID_SInternetSecurityManager);
    }
    //#define SID_SInternetHostSecurityManager     IID_IInternetHostSecurityManager
    static InternetHostSecurityManagerPtr QueryInternetHostSecurityManager(IUnknown *punk)
    {
        return ::InternalQueryService<InternetHostSecurityManagerPtr>(punk, SID_SInternetHostSecurityManager);
    }
    //#define SID_SHlinkFrame IID_IHlinkFrame
    static IHlinkFramePtr QueryHlinkFrame(IUnknown *punk)
    {
        return InternalQueryService<IHlinkFramePtr>(punk, SID_SHlinkFrame);
    }
    static IHlinkSitePtr QueryContainer(IUnknown *punk)
    {
        return InternalQueryService<IHlinkSitePtr>(punk, SID_SContainer);
    }
    //#define SID_SHTMLWindow IID_IHTMLWindow2
    static IHtmlWindow2Ptr QueryHTMLWindow(IUnknown *punk)
    {
        return InternalQueryService<IHtmlWindow2Ptr>(punk, SID_SHTMLWindow);
    }
    //#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory
    static IElementBehaviorFactoryPtr QueryElementBehaviorFactory(IUnknown *punk)
    {
        return InternalQueryService<IElementBehaviorFactoryPtr>(punk, SID_SElementBehaviorFactory);
    }
    //#define SID_SOleUndoManager IID_IOleUndoManager
    static IOleUndoManagerPtr QueryOleUndoManager(IUnknown *punk)
    {
        return InternalQueryService<IOleUndoManagerPtr>(punk, SID_SOleUndoManager);
    }
 
    template <class _InterfacePtr>
    static _InterfacePtr InternalQueryService(IUnknown *punk, REFGUID guidService)
    {
        HRESULT hr = S_OK;
 
        IServiceProviderPtr spServiceProvider = punk;
        if (spServiceProvider == NULL)
        {
//            ATLASSERT(0);
            return NULL;
        }
 
        _InterfacePtr spResult;
        hr = spServiceProvider->QueryService(guidService, _InterfacePtr::GetIID(), (void**)&spResult);
        if (FAILED(hr))
        {
            return NULL;
        }
 
        return spResult;
    }
一覧に戻る
© 2003 WAC.com All Right Reserved.