WebBrowser
概述
WebBrowser控件是微软提供的用于在Windows应用程序中嵌入浏览器功能的ActiveX控件- 基于
Internet Explorer的Trident渲染引擎
框架
- 核心接口:
- 主要通过
IWebBrowser2 COM接口进行编程控制。
- 主要通过
- 渲染引擎
- 使用
Internet Explorer的Trident引擎渲染网页内容
- 使用
- 宿主方式
- 作为
ActiveX控件托管在应用程序窗口中。
- 作为
- 支持框架
- 可在
MFC、ATL、WTL、原生Win32等多种C++框架中使用
- 可在
MFC 中使用
MFC提供了CHtmlView和CWebBrowser2封装类,简化了WebBrowser控件的使用CHtmlView- 创建基于
CHtmlView的视图类,自动包含浏览器功能。调用Navigate2方法加载页面 - 重写
OnBeforeNavigate2、OnDocumentComplete等虚函数处理事件
- 创建基于
CWebBrowser2:- 在对话框或窗口中动态创建控件。调用
Create方法指定位置和大小 - 通过成员函数控制浏览器行为
- 在对话框或窗口中动态创建控件。调用
- 示例
|
1 2 3 4 5 6 7 8 9 10 11 12 |
``` ### `ATL` 中使用 1. `ATL` 提供更底层的 `COM` 支持,需要手动处理更多细节 2. 使用 `CAxWindow` 承载 `ActiveX` 控件 3. 通过 `QueryControl` 获取 `IWebBrowser2` 接口 4. 实现 `IDispEventImpl` 来接收浏览器事件 5. 示例 ```C++ |
原生 Win32中使用
-
完全使用
COM API进行操作,需要创建AtlAxWin窗口类承载控件 -
使用
CoCreateInstance创建WebBrowser实例 -
通过连接点(
Connection Points)机制接收事件 -
示例
|
1 |
注意事项
- 浏览器模式控制
- 默认情况下
WebBrowser控件运行在IE7兼容模式 - 需要通过注册表设置
FEATURE_BROWSER_EMULATION来指定模拟的IE版本(如IE11) - 注册表路径:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
键名为应用程序名称,值为版本号(如11001表示IE11)
- 默认情况下
- 线程模型
- 必须在
STA(Single-Threaded Apartment)线程中使用 - 调用
CoInitializeEx时使用COINIT_APARTMENTTHREADED参数
- 必须在
- 事件接收
- 需要实现
IDispatch接口来接收事件通知,或使用ATL的IDispEventImpl简化事件处理 - 常见事件包括
BeforeNavigate2、NavigateComplete2、DocumentComplete等
- 需要实现
- 脚本交互:
- 通过
IHTMLDocument2接口访问DOM - 使用
window.external机制实现JavaScript调用C++代码,需要实现IDocHostUIHandler接口
- 通过
- 内存管理
- 使用
COM智能指针(如CComPtr或_com_ptr_t)管理接口生命周期 - 确保在适当时机释放接口,调用
Release方法
- 使用
IWebBrowser2
概述
IWebBrowser2是WebBrowser控件的COM接口,基于Internet Explorer(Trident引擎)- 它允许在
Windows应用程序中嵌入浏览器功能,支持ActiveX、COM等传统技术 - 现在已被
WebView2取代
使用方法
- 初始化
COM库:- 调用
CoInitialize或CoInitializeEx初始化COM环境
- 调用
- 创建实例:
- 使用
CoCreateInstance创建WebBrowser控件实例,CLSID为CLSID_WebBrowser
- 使用
- 获取接口:
- 通过
QueryInterface获取IWebBrowser2接口指针
- 通过
- 导航页面:
- 调用
Navigate或Navigate2方法加载URL
- 调用
- 事件处理:
- 实现
DWebBrowserEvents2接口来处理浏览器事件(如页面加载完成、导航等)
- 实现
声明:本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ WTL 概述03/10
- ♥ string←转换→LPCSTR10/12
- ♥ 非阻塞版本 Sleep实现10/12
- ♥ 关于资源管理器的操作06/24
- ♥ C++编程规范101规则、准则与最佳实践 二01/07
- ♥ STL_内存处理工具05/02