Извините, если на мой вопрос ранее уже был дан ответ, но я в течение нескольких дней искал в Интернете, в том числе и SO, без решения.
По сути, я хочу реализовать Download Manager для управления веб-браузером IE (не самой IDE).
Я много читал на MSDN и среди них есть эта ссылка который показывает, как его создать.
Проблема с этим примером (и моя проблема в этом случае) заключается в том, где я могу зарегистрировать / применить IServiceProvider к своему веб-браузеру. В статье не сказано. Однако поиск я нашел этот вопрос и это сказать, что я цитирую
Используйте CAxWindow :: QueryHost, чтобы получить указатель IObjectWithSite. Call SetSite
Передача вашей реализации IServiceProvider.
К сожалению, я не использую или ничего не знаю об ATL, поскольку использую wxWidgets. Так где же взять это в 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 учебный класс.
Других решений пока нет …