复用Web浏览器控件

7

我有一个纯Win32应用程序(没有MFC等),我希望在窗口中添加一个Web浏览器控件。我知道COM的基础知识,可以使用以下方法为浏览器创建一个COM对象:

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

然而,显然需要调用SetClientSite,并传递一个IOleClientSite*。如何获取这样的接口?这个示例实现了它自己的浏览器类,该类通过派生和实现它(此处)提供了接口。我试图沿着这条路走,但是为了实例化浏览器类,我需要注册它(不是吗?)。这看起来非常复杂 - 我只想使用现有的COM对象,而不是实现和注册自己的对象。我错过了什么?
假设我作为应用程序的一部分实现了自己的ClientSite类,是否有可能不注册它,只需通过调用new ClientSite来实例化它(然后使用QueryInterface获取接口)?这会起作用吗,还是必须调用CoCreateInstance

1
你不是获取接口,而是实现它,或者找到另一个已经实现了该接口的ActiveX容器,比如MFC或ATL。 - Sheng Jiang 蒋晟
3个回答

3

CodeGuru上有一个示例,另一个在CodeProject上,其中包含了使用纯C实现托管Web浏览器控件的最简单实现。您需要实现自己的IOleClientSite,但它是较容易实现的类之一。是的,调用CoCreateInstanceOleCreate来创建Web浏览器控件的实例是必需的。

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


谢谢,这指引了我正确的方向。正如你所说,这个例子是用C语言编写的,但我将其改写为C++代码后,它完美地运行了。 - Dabbler
1
@Dabbler,你是如何将它改写成C++的?很多人(包括我)都在尝试在C++中使用它,但由于我们是新手,所以失败了:| 你能否提供一个示例?我已经花了一整天的时间研究,但找不到任何简单的C++示例。问题是大多数链接都已失效,例如http://www.wischik.com/lu/programmer/webform.html的Lucian Wischik。我一直在尝试将C代码用于我的C++应用程序(这是我第一个C++应用程序),但到目前为止没有成功。 - user3424033
@Tomas 这是CodeProject文章所基于的原始示例:https://groups.google.com/forum/#!topic/comp.os.ms-windows.programmer.win32。它使用C++编写,且相对简单。 - user362515

0

尝试使用WTL(来自微软的仅头文件库)。安装其项目模板。从模板创建一个新的WTL项目,并选择“Web浏览器”控件选项(或任何名称)。现在,您可以调查生成的源代码或(我的个人建议)将您的内容移动到此项目中。


-3

3
您所写的似乎适用于启动外部浏览器;我认为OP是关于使用IE作为对话框控件。 - Kirill Kobelev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接