2009-12-23 18 views
2

Ces jours-ci, je tente de créer un contrôle WebBrowser caché dans mon programme, et l'utilisation de l'interface IViewObject dessiner à mon contrôleur de domaine personnalisé. Le résultat est correct, j'ai obtenu tout le contenu que je veux, mais la vitesse de tirage est inacceptable, en particulier certaines pages Web complexes qui contiennent des objets Flash, Chaque dessin à DC coûte plus de 100 ms. Donc, l'objet flash que j'ai dessiné n'est pas lisse.Est-il possible de dessiner du contenu Webbrowser sur un contrôleur de domaine spécifique?

Existe-t-il un moyen rapide de dessiner le contrôle sur un contrôleur de domaine spécifique?

mon code sinpet est comme ceci:

//hCompDc is a CompatibleDC which select a CompatibleBitmap. 
RECTL imageRect = {0, 0, nWidth, nHeight}; 
pHtmlDocument2->QueryInterface(IID_IViewObject, (void **)&pViewObject); 
pViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL, hCompDc, NULL, &imageRect, NULL, 0); 

Merci d'avoir lu cette question.

En attente de vos réponses ~

+0

Qu'est-ce que vous essayez d'accomplir? –

+0

@Daniel J'essaie d'obtenir le contenu du WebBrowser en douceur, et le dessiner à un autre endroit où, comme la surface DirectX, ou MemDC. Et mieux si je peux cacher l'interface utilisateur originale du navigateur – Gohan

Répondre

1

Il n'y a pas d'autre façon de le faire. Aucun des composants que vous utilisez (IE, Flash, etc.) n'a été conçu pour être utilisé de cette manière. Si le temps de tirage est un problème, vous devez le faire sur un thread séparé et synchroniser.

+0

Je pensais que l'utilisation de mutithread peut aider l'interface utilisateur semble lisse, mais le contenu du navigateur n'est toujours pas lisse? Ai-je mal pensé? – Gohan

+0

Je ne suis pas sûr de comprendre votre question. –

+0

J'essaie de créer un thread appeler la fonction OleDraw, mais je ne sais pas comment faire la synchronisation avec l'interface COM. l'appel dans "OleDraw" lèvera toujours une exception. Je peux seulement utiliser le WM_PRINT pour le faire dans un thread séparé :(. – Gohan

0

Essayez ceci: http://sourceforge.net/projects/wke/

char* buffer = new char[800*600*4]; 
IWebVeiw* webView = wkeCreateWebView("");  
webView->resize(800, 600); 
webView->loadURL("www.google.com"); 
webView->paint(buffer, 0); 
wkeDestroyWebView(webView);