簡體   English   中英

自定義下載管理器IWebbrowser2

[英]Custom Download Manager IWebbrowser2

抱歉,如果以前在這里回答過我的問題,但是好幾天以來,我一直在搜索Internet,包括SO,但沒有解決方案。

基本上,我想為IE Web瀏覽器控件(不是IDE本身)實現Download Manager。 我在MSDN上已經讀了很多書,其中有一個鏈接顯示了如何創建它。 這個示例的問題(在這種情況下是我的問題)是在哪里向我的Web瀏覽器注冊/應用IServiceProvider。 該條沒有說。 但是搜索我發現這個問題 ,並說我引用

使用CAxWindow :: QueryHost獲取IObjectWithSite指針。 調用SetSite傳遞IServiceProvider實現。

不幸的是,當我使用wxWidgets時,我不使用或不了解ATL。 那么,我在wxWebview或“香草” MS COM中從哪里得到呢?

這是我到目前為止所擁有的

HRESULT wxDownloadMgr::Download(IMoniker *pmk, IBindCtx *pbc,DWORD dwBindVerb,  
                  LONG grfBINDF,BINDINFO *pBindInfo, LPCOLESTR pszHeaders,LPCOLESTR pszRedir,UINT uiCP )
{
    // Get URL
    LPOLESTR urlToFile;
    HRESULT result = pmk->GetDisplayName( pbc, NULL, &urlToFile ); 
    //OLECHAR is simply a wchar_t and an LPOLESTR is a wide character string (e.g. wchar_t*). 
    wxString url(urlToFile);
    wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_DOWNLOAD_BEGINS,GetId(), url, ""); 
    event.SetEventObject(this);//WHICH OBJECT TO SET HERE????????
    HandleWindowEvent(event);

    ::MessageBox(NULL,"Download","Download Manager",MB_OK);
    return S_OK;
} 

STDMETHODIMP wxServiceProvider::QueryService(REFGUID guidService,
                                            REFIID riid,
                                            void **ppv)
{
    HRESULT hr = E_NOINTERFACE;

    if (guidService == SID_SDownloadManager && riid == IID_IDownloadManager)
    {
        // Create new DownloadMgr object using ATL.
        CComObject<wxDownloadMgr>* pDownloadMgr;
        hr = CComObject<wxDownloadMgr>::CreateInstance(&pDownloadMgr);

        // Query the new CDownloadMgr object for IDownloadManager interface.
        hr = pDownloadMgr->QueryInterface(IID_IDownloadManager, ppv);
    }

    return hr;
}

您可以重寫wxActiveXContainer :: QueryClientSiteInterface以將自己的接口實現(例如IServiceProvider或IDocHostUIHandler)添加到客戶端站點。 可以在wxIEContainer類中找到一個示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM