У меня есть устаревшее приложение atl, которое размещает веб-браузер в окне ATL. Я создаю экземпляр клиента для размещения браузера, используя следующую последовательность
CComPtr<IOleObject> spOleObject;
HRESULT hr = CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC, ID_IOleObject,(void**)&spOleObject);
spOleObject->SetClientSite(this);
GetClientRect(&rcClient);
hr = spOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, &msg, this, 0, m_hWnd, &rcClient);
hr = AtlAdvise(m_spWebBrowser, GetUnknown(), DIID_DWebBrowserEvents2, &m_dwCookie);
CComVariant navvar(navurl);
m_spWebBrowser->Navigate2(&navvar, NULL, NULL, NULL, NULL);
Эта последовательность отлично работает для создания начального окна просмотра. Вызов navate2 работает, и если я смотрю на окно через spy ++, у меня есть Shell Embedding -> Shell DocObject View -> Internet Explorer_Server. Когда появляется всплывающее окно (обнаруживается с помощью NewWindow3), я запускаю новое окно и выполняю ту же последовательность кода для нового окна. Во всплывающем окне navate2 не работает, и когда я смотрю на это новое окно в spy ++, у меня просто есть Shell Embedding. У меня возникает та же проблема, даже если я запускаю всплывающее окно при запуске, поэтому оно вообще не связано с NewWindow3 - похоже, второй экземпляр веб-элемента управления не создается, хотя все вызовы возвращают S_OK.
Эта последовательность работала нормально под IE7, но теперь я использую IE8, и всплывающее окно не работает. Я явно что-то упускаю, но не могу догадаться, что это может быть. Любые предложения будут невероятно полезны.