gpt4 book ai didi

c++ - 如何在 MSHTML 中禁用 VML

转载 作者:可可西里 更新时间:2023-11-01 13:27:26 27 4
gpt4 key购买 nike

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

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

我无法通过编程方式告诉 MSHTML 我不想要 VML 而想要 HTML。有什么想法吗?

最佳答案

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

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

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

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

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

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

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

关于c++ - 如何在 MSHTML 中禁用 VML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6782609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com