私の質問が以前にここで回答されていた場合は申し訳ありませんが、私は何日もの間、SOを含むインターネットを検索しましたが、解決策はありませんでした.
基本的に、IE webbrowser コントロール (IDE 自体ではありません) 用に Download Manager を実装したいと考えています。私は MSDN で多くのことを読みましたが、その中に作成方法を示すこのリンクがあります。この例の問題 (およびその場合の私の問題) は、IServiceProvider を Web ブラウザーに登録/適用する場所です。記事は言っていません。ただし、検索するとこの質問が見つかり、引用すると表示 されます
CAxWindow::QueryHost を使用して、IObjectWithSite ポインターを取得します。IServiceProvider 実装を渡して SetSite を呼び出します。
残念ながら、私は wxWidgets を使用しているため、ATL を使用したり、ATL について何も知りません。では、wxWebview または "vanilla" 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;
}