OLE与MSHTML支持哪些自定义功能?相关开发需求能否实现?
功能可行性及实现方案
你所列出的4项需求全部可以在原生WinAPI(无MFC、UWP等框架依赖)调用MSHTML的场景下实现,对应实现方案如下:
- 处理链接点击事件:可通过实现
IDocHostUIHandler接口的TranslateUrl方法拦截所有页面导航请求,也可监听DWebBrowserEvents2分发的BeforeNavigate2事件,拿到目标跳转URL后直接取消MSHTML默认导航行为,调用ShellExecute即可唤起系统默认外部浏览器打开链接,也可根据自定义URL规则执行其他业务逻辑。 - 复选框切换事件处理:在HTML页面加载完成后,通过
IHTMLDocument3接口的getElementById方法获取对应复选框的DOM元素,调用attachEvent绑定onchange事件回调,触发回调时通过IHTMLInputElement的checked属性读取当前选中状态,直接同步修改宿主应用的对应变量即可。 - 禁用文本选择功能:有两种成熟实现方案,一是在宿主侧实现
IDocHostUIHandler接口的GetHostInfo方法,设置DOCHOSTUIFLAG_DIALOG标志位,MSHTML会自动禁用全局文本选择、内容拖拽等默认交互行为;二是直接在HTML代码中添加全局CSS规则* { user-select: none; },两种方案均可稳定生效。 - 窗口嵌入与HiDPI缩放支持:MSHTML渲染载体本质是OLE控件,可通过
AtlAxCreateControl(仅需引入轻量atlbase.h头文件,无需依赖完整ATL框架,原生WinAPI项目可直接调用)将其创建为指定父窗口的子窗口,和普通标准控件一样自由调整放置位置和尺寸。HiDPI适配只需给进程开启Per-Monitor DPI感知,当父窗口收到WM_DPICHANGED消息时,调用IWebBrowser2接口的put_Zoom方法传入对应DPI缩放比例(比如150% DPI传入参数150),同时同步调整控件窗口尺寸即可完成适配。
内容的提问来源于stack exchange,提问作者qloq
相关产品推荐
相关产品推荐

