Повторное использование элемента управления веб-браузера

У меня есть чистое приложение Win32 (без MFC и т. Д.), В которое я хочу добавить элемент управления веб-браузера в окне. Я знаю основы COM и могу создать COM-объект для браузера, используя

 hr = CoCreateInstance(
CLSID_WebBrowser,
NULL,
CLSCTX_INPROC,
IID_IWebBrowser2,
(void**) &pWebBrowser);

Однако, очевидно, нужно вызвать SetClientSite, передав IOleClientSite *. Как получить такой интерфейс? Этот пример реализует свой собственный класс браузера, который обеспечивает интерфейс, производный от него и реализующий его (Вот). Я пытался пойти по этому пути, но чтобы создать экземпляр класса браузера, мне пришлось бы его зарегистрировать (нет?). Это кажется очень сложным — я просто хочу использовать существующий COM-объект, а не реализовывать и регистрировать свой собственный. Что мне не хватает?

Предполагая, что я реализую свой собственный класс ClientSite как часть моего приложения, возможно ли не зарегистрировать его, а просто создать его экземпляр, вызвав new ClientSite (а затем получить интерфейс как QueryInterface)? Будет ли это работать, или это обязательно позвонить CoCreateInstance?

5

Решение

Есть пример на CodeGuru и еще один на CodeProject которая содержит простейшую реализацию для размещения элемента управления веб-браузера, реализованного на чистом C. Вы должны реализовать свой собственный IOleClientSite, но это один из самых простых классов для реализации. Да, обязательно позвонить CoCreateInstance или же OleCreate создать экземпляр элемента управления веб-браузера.

http://www.codeguru.com/cpp/i-n/ieprogram/article.php/c4379/Display-a-Web-Page-in-a-Plain-C-Win32-Application.htm

http://www.codeproject.com/Articles/3365/Embed-an-HTML-control-in-your-own-window-using-pla

2

Другие решения

Попробуйте WTL (только библиотека заголовков от MS). Установите свои шаблоны проектов. Создайте новый WTL-проект из шаблона и выберите параметр управления «веб-браузер» (или как его там). Теперь вы можете исследовать сгенерированные источники или (моя личная рекомендация) переместить ваши материалы в этот проект

0

Я не уверен, что именно ты пытаешься сделать …

… но я бы начал с попытки использовать простой ShellExecute (), если это вообще возможно:

-2
По вопросам рекламы [email protected]