在IE9的Web浏览器控件中,DrawToDC失败

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); // 获取DC
hr = pRender->DrawToDC(hMetaDC);
以上代码已经在IE6、IE7、IE8上完美运行,为浏览器内容提供了矢量图像。但是上述DrawToDC调用在IE9 Beta版本(在32位Windows 7上测试)中失败,错误代码为0x8007000e。
我尝试使用WM_PRINT和其他绘制方法,但只能获取位图图像,而无法获取矢量图像。
请问为什么上面的代码在IE9中会失败,是否有其他方法可以获取IE9的矢量图像呢?
谢谢, Subhash
谢谢,我担心情况可能是这样。您是否知道是否有一种方法可以暂时将IE9渲染切换到GDI模式。我预计这会降低渲染质量/效率,但在我的当前应用程序中应该可以接受。

1
请在http://connect.microsoft.com/IE上搜索重复的错误,如果没有找到,请自己打开一个新的。谢谢! - EricLaw
2个回答

3

这只是一个猜测。IE9通过硬件加速实现更快的渲染。我猜想他们绕过了GDI,使用了更直接的API,例如新的DirectWrite和/或Direct2D。元文件基本上是GDI调用的序列化。如果没有GDI调用,就没有什么可以捕捉的了。所以你可能没有什么希望。


1
尝试在IHtmlDocument3的documentElement属性上执行相同操作,但不能保证它会起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接