【发布时间】:2011-11-10 11:11:23
【问题描述】:
我想知道以下控件和类之间的区别。
Windows 浏览器控制与CDHtmlDialog 和CHtmlView。
可见这些东西是用来在UI中添加html内容的 基于 Windows 的应用程序。
但是当我们在互联网上搜索时,经常会与这些东西混淆。
如果能解释一下这些控件和类的可用性就好了。
【问题讨论】:
标签: winapi visual-c++ visual-studio-2008 mfc
我想知道以下控件和类之间的区别。
Windows 浏览器控制与CDHtmlDialog 和CHtmlView。
可见这些东西是用来在UI中添加html内容的 基于 Windows 的应用程序。
但是当我们在互联网上搜索时,经常会与这些东西混淆。
如果能解释一下这些控件和类的可用性就好了。
【问题讨论】:
标签: winapi visual-c++ visual-studio-2008 mfc
Web 浏览器控件是一个 Windows ActiveX 控件,Internet Explorer 本身可能使用它来显示 HTML 内容。至少,Web 浏览器控件和 Internet Explorer 使用相同的实现来呈现 HTML。
CHtmlView 是一个 MFC - CView - 派生类托管所说的 ActiveX 控件。CHtmlDialog 是一个 MFC - CDialog - 派生类做同样的事情。
它们是独立的类,因为不幸的是 MFC 在对话框、视图和窗口之间存在“巨大差距”。
我没有在这两个 MFC 类上进行过大量工作,但据我了解,它们本身并没有添加任何功能。您也可以像普通的ActiveX一样托管Web浏览器控件,并使用GetControlUnknown获取IWebBrowser接口。
根据我的经验,最大的问题是 DOM 只能在 DocumentComplete 之后访问,并且在消息循环没有启动之前该事件不会触发。这使得一些操作变得相当痛苦,我最终得到了一个自定义界面,在 DOM 可用之前排队修改。
附: Windows 现在提供了基于 Edge 的 WebView2 - ActiveX 控件,作为一个足够强大的替代品。见https://docs.microsoft.com/en-us/microsoft-edge/webview2/
【讨论】:
DOCHOSTUIINFO 和 DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE 之前阻止脚本执行。没试过;见msdn.microsoft.com/en-us/library/aa753277%28v=vs.85%29.aspx