2010-09-29 3 views
3

J'utilise le code suivant pour obtenir une image vectorielle Metafile pour le contenu du contrôle IWebBrowser2 comme suit:DrawToDC échoue sur le contrôle du navigateur web IE9

IHTMLElement * pDocBody;

IHTMLDocument2 * pDoc;

... ...

pDoc-> get_body (& pDocBody); // récupère l'élément body pour IHTMLDocument2

pDocBody-> get_parentElement (& pEleParent); pEleParent-> QueryInterface (IID_IHTMLElement2, (void **) & pRenderEle2); // obtenir l'élément à rendre à partir de

pRenderEle2-> QueryInterface (IID_IHTMLElementRender, (void **) & pRender); // obtient l'interface de rendu

HDC hMetaDC = :: CreateEnhMetaFile (hRefDC, PictFile, & MetaRect, NULL); // obtient DC

hr = pRender-> DrawToDC (hMetaDC);

Le code ci-dessus avait travaillé magnifiquement avec IE6, IE7, IE8 pour fournir une image vectorielle pour le contenu du navigateur. Mais l'appel DrawToDC ci-dessus échoue avec la version bêta de IE9 (test sous Windows 7, 32 bits) avec le code d'erreur: 0x8007000e.

J'ai essayé d'utiliser WM_PRINT et d'autres méthodes de dessin, mais je ne peux obtenir que l'image bitmap, pas l'image vectorielle.

Toute idée de pourquoi DrawToDC échoue avec IE9 dans le code ci-dessus, et s'il existe une autre méthode pour obtenir une image vectorielle avec IE9.

Merci, Subhash


Merci, je craignais que cela pourrait être le cas. Savez-vous s'il existe une méthode pour basculer temporairement le rendu IE9 en mode GDI? Je m'attends à ce que cela réduise la qualité et l'efficacité du rendu, ce que je devrais pouvoir vivre avec mon application actuelle.

+1

S'il vous plaît rechercher des bugs en double sur http://connect.microsoft.com/IE et Si vous n'en trouvez pas, ouvrez-en un vous-même. – EricLaw

Répondre

3

Ceci est juste une supposition. IE9 vante un rendu plus rapide grâce à l'accélération matérielle. Je soupçonne qu'ils contournent GDI et utilisent quelque chose de plus direct comme les nouvelles API DirectWrite et/ou Direct2D. Les métafichiers sont essentiellement une sérialisation des appels GDI. Sans appels GDI, il n'y a pas grand chose à capturer. Donc vous pourriez ne pas avoir de chance. :-(

1

Essayez de faire la même chose sur documentElement (propriété de IHtmlDocument3) Ne peut pas promettre cela fonctionnera.

Questions connexes