好像没有这方面的文档,请指教

解决方案 »

  1.   

    重载CreateControlSite,返回一个实现了INewWindowManager的对象
      

  2.   

    .h文件加入如下 代码//INewWindowManagerBEGIN_INTERFACE_PART(HTMLWindow2 , IHTMLWindow2)
    INIT_INTERFACE_PART(CDocHostSite,  HTMLWindow2 )
    STDMETHOD(showModalDialog)(
    LPCWSTR pszUrl,
    LPCWSTR pszName,
    LPCWSTR pszUrlContext,
    LPCWSTR pszFeatures,
    BOOL fReplace,
    DWORD dwFlags,
    DWORD dwUserActionTime);
    END_INTERFACE_PART(HTMLWindow2 ).cpp文件加入如下代码
    BEGIN_INTERFACE_MAP(CDocHostSite, COleControlSite)
    INTERFACE_PART(CDocHostSite, IID_IDocHostShowUI, DocHostShowUI)
    INTERFACE_PART(CDocHostSite, IID_IDocHostUIHandler, DocHostUIHandler)
    INTERFACE_PART(CDocHostSite, IID_INewWindowManager, NewWindowManager)
    #if (_WIN32_IE >= 0x0501) // IE 5.5 and higher
    INTERFACE_PART(CDocHostSite, IID_IDocHostUIHandler2, DocHostUIHandler2)
    #endif
    INTERFACE_PART(CDocHostSite, IID_IInternetSecurityManager, InternetSecurityManager)
    INTERFACE_PART(CDocHostSite, IID_IServiceProvider, ServiceProvider)

    END_INTERFACE_MAP()
    ULONG CDocHostSite::XNewWindowManager::AddRef()
    {
    METHOD_PROLOGUE(CDocHostSite, NewWindowManager); return pThis->ExternalAddRef();
    }ULONG CDocHostSite::XNewWindowManager::Release()
    {
    METHOD_PROLOGUE(CDocHostSite, NewWindowManager); return pThis->ExternalRelease();
    }HRESULT CDocHostSite::XNewWindowManager::QueryInterface(REFIID riid, void ** ppvObj)
    {
    METHOD_PROLOGUE(CDocHostSite, NewWindowManager); return pThis->ExternalQueryInterface( &riid, ppvObj );
    }HRESULT CDocHostSite::XNewWindowManager::EvaluateNewWindow(
    LPCWSTR pszUrl,
        LPCWSTR pszName,
        LPCWSTR pszUrlContext,
        LPCWSTR pszFeatures,
        BOOL fReplace,
        DWORD dwFlags,
        DWORD dwUserActionTime
    )
    {
    METHOD_PROLOGUE(CDocHostSite, NewWindowManager);
    return pThis->m_pView->OnEvaluateNewWindow(   pszUrl,
          pszName,
          pszUrlContext,
          pszFeatures,
          fReplace,
          dwFlags,
          dwUserActionTime
      );
    return E_NOTIMPL;
    }但是没有拦截到showmodeldialog()这样的函数,是什么原因呢?
      

  3.   

    STDMETHODIMP CExtendedHtmlControlSite::XServiceProvider::QueryService(REFGUID guidService,  
    REFIID riid,
    void** ppvObject)
    {
    if (riid == IID_INewWindowManager)
    {
    METHOD_PROLOGUE(CExtendedHtmlControlSite, ServiceProvider);
    HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObject);
    return hr;
    }
    else
    {
    *ppvObject = NULL; }
    return E_NOINTERFACE;
    }