重用Web浏览器控件

时间:2012-09-28 21:59:59

标签: c++ windows winapi com webbrowser-control

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

为浏览器创建一个COM对象
 hr = CoCreateInstance(
    CLSID_WebBrowser,
    NULL,
    CLSCTX_INPROC,
    IID_IWebBrowser2,
    (void**) &pWebBrowser);

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

假设我在我的应用程序中实现了自己的ClientSite类,是否可以不注册它,只需通过调用new ClientSite实例化它(然后使用QueryInterface获取接口) ?这是否有效,或者是否必须致电CoCreateInstance

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

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

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