我有一个用C ++编写的应用程序使用Visual Studio 2010在Windows(XP版本向上)上作为.EXE运行。它使用普通的Win32作为现有UI。
我还有一些基于网络浏览器格式,HTML / CSS / JavaScript的内容。我希望在应用程序窗口中显示此内容,就像WebView在Android上工作和UIWebView在iPhone上工作一样。 Web内容应该能够使用对自定义JavaScript方法的调用与周围的本机应用程序进行通信。
我知道WebKit项目。但是,查看可供下载的二进制文件,它似乎是一个独立的应用程序,而不是可以链接到C ++应用程序以允许显示浏览器内容的库。
有人能建议这样做的好方法吗?
答案 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/)。