3

次のコードを使用して、IWebBrowser2 コントロールのコンテンツのメタファイル ベクター イメージを次のように取得しています。

IHTMLElement* pDocBody;

IHTMLDocument2* pDoc;

... ... ...

pDoc->get_body(&pDocBody); // IHTMLDocument2 の body 要素を取得

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 のベータ リリース (Windows 7、32 ビットでのテスト) でエラー コード: 0x8007000e で失敗します。

WM_PRINT やその他の描画方法を使用しようとしましたが、ベクター画像ではなくビットマップ画像しか取得できません。

上記のコードで DrawToDC が IE9 で失敗する理由、および IE9 でベクター画像を取得する他の方法があるかどうか。

ありがとう、サブハッシュ


ありがとう、私はこれが事実かもしれないと心配していました。IE9 レンダリングを一時的に GDI モードに切り替える方法があるかどうか知っていますか。これにより、レンダリングの品質/効率が低下することが予想されますが、現在のアプリケーションでは問題なく使用できるはずです。

4

2 に答える 2

3

これは単なる推測です。IE9は、ハードウェアアクセラレーションにより、より高速なレンダリングを宣伝しています。彼らはGDIをバイパスしていて、新しいDirectWriteやDirect2DAPIのようなより直接的なものを使用しているのではないかと思います。メタファイルは基本的にGDI呼び出しのシリアル化です。GDI呼び出しがなければ、そこでキャプチャすることはあまりありません。だからあなたは運が悪いかもしれません。:-(

于 2010-09-29T17:09:23.027 に答える
1

documentElement (IHtmlDocument3 のプロパティ) で同じことを試してみてください。うまくいくとは約束できません。

于 2010-11-29T16:56:35.063 に答える