3

我一直在使用以下代码来获取 IWebBrowser2 控件内容的元文件矢量图像,如下所示:

IHTMLElement* pDocBody;

IHTMLDocument2* pDoc;

……

pDoc->get_body(&pDocBody); // 获取 IHTMLDocument2 的正文元素

pDocBody->get_parentElement(&pEleParent); pEleParent->QueryInterface(IID_IHTMLElement2,(void**)&pRenderEle2); // 获取要渲染的元素

pRenderEle2->QueryInterface(IID_IHTMLElementRender,(void**)&pRender); // 获取渲染接口

HDC hMetaDC=::CreateEnhMetaFile(hRefDC,PictFile,&MetaRect,NULL); // 获取直流

hr = pRender->DrawToDC(hMetaDC);

上面的代码与 IE6、IE7、IE8 完美配合,为浏览器内容提供矢量图像。但是上面的 DrawToDC 调用因 IE9 的 Beta 版本(在 Windows 7 32 位上测试)而失败,错误代码为:0x8007000e。

我曾尝试使用 WM_PRINT 和其他绘图方法,但我只能获取位图图像,而不是矢量图像。

知道为什么 DrawToDC 在上面的代码中因 IE9 失败,以及是否有任何其他方法可以使用 IE9 获取矢量图像。

谢谢, Subhash


谢谢,我担心可能是这种情况。你知道是否有一种方法可以暂时将 IE9 渲染切换到 GDI 模式。我希望这会降低渲染质量/效率,我应该能够在我当前的应用程序中使用它。

4

2 回答 2

3

这只是一个猜测。IE9 通过硬件加速吹捧更快的渲染。我怀疑他们正在绕过 GDI 并使用更直接的东西,比如新的 DirectWrite 和/或 Direct2D API。元文件基本上是 GDI 调用的序列化。如果没有 GDI 调用,那里就没有什么可捕获的了。所以你可能不走运。:-(

于 2010-09-29T17:09:23.027 回答
1

尝试在 documentElement(IHtmlDocument3 的属性)上做同样的事情不能保证它会起作用。

于 2010-11-29T16:56:35.063 回答