2012-09-28 92 views
4

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

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

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

假设我将自己的ClientSite类实现为应用程序的一部分,是否可以不注册它,并通过调用new ClientSite(然后使用QueryInterface获取接口)来​​实例化它?这项工作是否可行,还是必须致电CoCreateInstance

+1

你没有获得接口,实现它,或者找到实现,如MFC或ATL接口其他一些ActiveX容器。 –

回答

2

有上CodeProject其中包含托管在纯C.你确实实现了一个Web浏览器控件最简单的实现上CodeGuru和另一个例子必须实现您自己的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

+0

谢谢,这指出我在正确的方向。正如你所说,这个例子是在C中,但我重写它为C++代码,它完美的作品。 – Dabbler

+1

@Dabbler你是如何将它重写为C++的?因为我们是noobs,所以一些试图在C++(和我)中使用它的人失败了:|你能举个例子吗?我一直在研究这一整天,并没有找到任何简单的c + +示例。问题是大多数链接都是死的,例如http://www.wischik.com/lu/programmer/webform.html lucian wischik之一。我一直在尝试使用c代码到我的C++中(我的第一个C++应用程序),但直到现在都没有。 – Tomas

+0

@Tomas以下是CodeProject文章基于的原始示例:https://groups.google.com/forum/#!topic/comp.os.ms-windows.programmer.win32。它在C++中,并且更简单得多。 – user362515

0

尝试WTL(头呃只有来自MS的图书馆)。安装其项目模板。从模板创建一个新的WTL项目并选择“Web浏览器”控制选项(或任何名称)。现在,你可以调查产生的来源或(我的个人建议)移动你的东西到这个项目