7

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

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

然而,显然需要调用 SetClientSite,传递一个 IOleClientSite*。如何获得这样的接口?这个例子实现了它自己的浏览器类,它通过从它派生并实现它来提供接口(这里)。我试图沿着这条路走,但是为了实例化浏览器类,我必须注册它(不是吗?)。这看起来非常复杂——我只想使用现有的 COM 对象,而不是实现和注册我自己的。我错过了什么?

假设我确实将自己的 ClientSite 类实现为我的应用程序的一部分,是否可以不注册它,而只是通过调用new ClientSite(然后以 using 获取接口QueryInterface)来​​实例化它?这会起作用,还是必须打电话CoCreateInstance

4

3 回答 3

3

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

http://www.codeguru.com/cpp/in/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

于 2012-09-29T22:15:36.317 回答
0

尝试 WTL(来自 MS 的仅标头库)。安装其项目模板。从模板创建一个新的 WTL 项目并选择“Web 浏览器”控制选项(或任何名称)。现在你可以调查生成的资源或者(我个人的建议)将你的东西移到这个项目中

于 2012-09-28T23:01:52.883 回答
-3

我不确定你到底想做什么......

...但我会首先尝试使用简单的 ShellExecute(),如果可能的话:

于 2012-09-28T22:08:51.793 回答