如何在MSHTML中禁用VML

Ria*_*man 6 c++ windows com winapi mshtml

我在编辑模式下使用MSHTML控件.当我将文本中的内容复制并粘贴到我的控件中时,MSHTML控件会剥离标准HTML并保留那些不太受支持的VML标记.

如果我取消注册VML Dll(regsvr32 -u"%ProgramFiles%\ Common Files\Microsoft Shared\VGX\_vgx.dll),那么控件将按照我想要的方式运行并丢弃VML并保留HTML.

我没有能够以编程方式告诉MSHTML我不想要VML而是HTML.有任何想法吗?

ese*_*elk 1

很抱歉,如果这个答案不完美,但随着问题的年龄和有多少人感兴趣,我想我会尝试一下,希望能帮助别人,即使不是OP。

我不确定 VML/Word 如何处理剪贴板数据。如果它在 Windows 剪贴板中放置了多种格式,一种是您想要的 HTML,另一种是 VML 格式,那么您很幸运,这应该可以工作。如果没有,那么您至少可以使用它来清理插入时的代码。

您需要查看IDocHostUIHandler::TranslateAccelerator。如果您还没有实现 IDocHostUIHandler,则需要实现。在加载 HTML 文档后,您可以使用ICustomDoc::SetUIHandler来注册它(如果您使用它,可以是一个空页面)。

在 TranslateAccelerator 中,您需要注意nCmdID == IDM_PASTE. 这是在用户将某些内容粘贴到 HTML 控件之前触发的,并且您可以在粘贴发生之前修改剪贴板内容。

您可以使用 GetClipboardData(RegisterClipboardFormat("HTML Format")) 之类的方法从剪贴板获取 HTML 格式。您可以使用 SetClipboardData 来替换剪贴板数据。

对于您的使用,如果您从Word复制后看到有多种剪贴板格式,您只需删除其中一种您不想要的格式即可。这样,当 HTML 控件完成粘贴时,它只会使用您想要的格式。

如果需要的话,我有代码示例,但它们是一个大型项目的一部分,并且某些部分使用了 Borland 的 VCL 库。我的代码检查剪贴板中的 CF_BITMAP 格式,并使用 PNG 文件转换为 HTML 格式。这样,将屏幕捕获粘贴到控件的用户将获得较小的 PNG 图像,而不是巨大的 BMP 文件。这个概念与您想要的大致相同。