在Windows(XP +)C ++应用程序中嵌入HTML / CSS / JS内容的最简单方法?

时间:2010-09-29 15:49:04

标签: html windows

我有一个用C ++编写的应用程序使用Visual Studio 2010在Windows(XP版本向上)上作为.EXE运行。它使用普通的Win32作为现有UI。

我还有一些基于网络浏览器格式,HTML / CSS / JavaScript的内容。我希望在应用程序窗口中显示此内容,就像WebView在Android上工作和UIWebView在iPhone上工作一样。 Web内容应该能够使用对自定义JavaScript方法的调用与周围的本机应用程序进行通信。

我知道WebKit项目。但是,查看可供下载的二进制文件,它似乎是一个独立的应用程序,而不是可以链接到C ++应用程序以允许显示浏览器内容的库。

有人能建议这样做的好方法吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是MFC,Patrick的回答是正确的。

如果您没有使用MFC,可以使用“ATL控制遏制”嵌入Internet Explorer - 请参阅How to add ATL control containment support to any window in Visual C++

归结为与正确的库连接,然后使用这个单行:

// Creates the Web Browser control and navigates to the 
// specified web page.
HWND hWnd = ::CreateWindow("AtlAxWin", "http://www.microsoft.com", 
                           WS_CHILD|WS_VISIBLE, 10, 10, 500, 300, hParent, NULL,
                           ::GetModuleHandle(NULL), NULL);

让你的JavaScript在你的C ++应用程序中调用函数是一个小问题 - 你需要创建一个实现IDispatch的对象,然后将其传递给IE控件的Advise方法{ {1}}接口,您可以通过IConnectionPoint获取。然后,您的JavaScript会调用IConnectionPointContainer::FindConnectionPoint,这会调用您window.external.my_func(...)的{​​{1}}方法 - 实现对象。

答案 1 :(得分:1)

您可以尝试将Internet Explorer作为COM组件包含在应用程序中。这在http://msdn.microsoft.com/en-us/library/aa752046(VS.85).aspx上解释。

您也可以使用QtWeb库(参见http://www.qtweb.net/)。