У меня есть чистое приложение Win32 (без MFC и т. Д.), В которое я хочу добавить элемент управления веб-браузера в окне. Я знаю основы COM и могу создать COM-объект для браузера, используя
hr = CoCreateInstance(
CLSID_WebBrowser,
NULL,
CLSCTX_INPROC,
IID_IWebBrowser2,
(void**) &pWebBrowser);
Однако, очевидно, нужно вызвать SetClientSite, передав IOleClientSite *. Как получить такой интерфейс? Этот пример реализует свой собственный класс браузера, который обеспечивает интерфейс, производный от него и реализующий его (Вот). Я пытался пойти по этому пути, но чтобы создать экземпляр класса браузера, мне пришлось бы его зарегистрировать (нет?). Это кажется очень сложным — я просто хочу использовать существующий COM-объект, а не реализовывать и регистрировать свой собственный. Что мне не хватает?
Предполагая, что я реализую свой собственный класс ClientSite как часть моего приложения, возможно ли не зарегистрировать его, а просто создать его экземпляр, вызвав new ClientSite
(а затем получить интерфейс как QueryInterface
)? Будет ли это работать, или это обязательно позвонить CoCreateInstance
?
Есть пример на CodeGuru и еще один на CodeProject которая содержит простейшую реализацию для размещения элемента управления веб-браузера, реализованного на чистом C. Вы должны реализовать свой собственный IOleClientSite
, но это один из самых простых классов для реализации. Да, обязательно позвонить CoCreateInstance
или же OleCreate
создать экземпляр элемента управления веб-браузера.
http://www.codeproject.com/Articles/3365/Embed-an-HTML-control-in-your-own-window-using-pla
Попробуйте WTL (только библиотека заголовков от MS). Установите свои шаблоны проектов. Создайте новый WTL-проект из шаблона и выберите параметр управления «веб-браузер» (или как его там). Теперь вы можете исследовать сгенерированные источники или (моя личная рекомендация) переместить ваши материалы в этот проект
Я не уверен, что именно ты пытаешься сделать …
… но я бы начал с попытки использовать простой ShellExecute (), если это вообще возможно: