7
votes

Comment fournir des données d'image pour le contrôle Web incorporé en C ++

dans mon application C ++ Je l'incorpore (via COM) un navigateur Web (Internet Explorer) (CLSID_WebBrowser).

Je peux afficher mon propre HTML dans ce contrôle en utilisant la méthode IHTMLDOCument2 :: Ecrire (), mais si le code HTML a , il n'est pas affiché. < / p>

Je suppose qu'il y a un moyen pour moi de fournir les données de foo.png en quelque sorte sur le contrôle Web, mais je ne trouve pas le bon endroit pour accrocher cette fonctionnalité?

J'ai besoin d'être pleinement contrôlé de la fourniture du contenu de Foo.png, alors des contourements tels que l'utilisation de Res: // protocole ou d'enregistrer sur le disque et à l'aide de fichier: // protocole ne sont pas assez bons. Je veux juste brancher mon code d'une manière ou d'une autre de sorte que lorsque l'intégré clsid_webbrowser contrôle voit dans les données HTML données avec ihtmldocument2 :: écrire () il me demandera de fournir ceci Données.


0 commentaires

3 Réponses :


0
votes

Vous pouvez intégrer un petit serveur Web tel que Mongoose et référencez-les de là.

en mangouste, vous pouvez attacher le rappel à un chemin spécifique, renvoyant ainsi des images du code C ++.

Nous utilisons cela pour nos outils de débogage, où chaque image est accessible à partir d'une interface Web


1 commentaires

C'est une possibilité mais j'espère qu'il existe une solution plus simple qui implique directement d'interagir avec le contrôle Web.



0
votes

La solution la plus simple serait un URI de données . Vous étielliez l'image directement avec ihtmldocument2 :: écrire () .


1 commentaires

C'est une possibilité aussi, mais le HTML n'est pas vraiment généré par moi et il n'est pas simple de remplacer IMG Link avec des données dans HTML existant



5
votes

Pour répondre à ma propre question, la solution qui a finalement travaillé pour moi est la suivante:

  1. registre personnalisé itinternetprotocol / itinternetProtocolinfo / via personnalisé iclassfactory donné à Itintertsession :: registreNamespace (). Pour des raisons qui ressemblent à un bug pour moi, il doit être un protocole déjà connu à IE (j'ai choisi "son") même si ce serait bien mieux si c'était mon propre espace de noms unique. < / li>

  2. flux Données HTML via un imoniker personnalisé via iPersistentMoniker :: Charger () et assurez-vous que imoniker :: getdisplayName () (qui est une URL de base selon laquelle les liens relatifs dans HTML sont résolus) commence par ce Schéma de protocole (dans mon cas «Sa: //»). De cette façon relative lien "foo.png" dans les données HTML sera son: //foo.png à IE qui rendra Urlmon Call Iinternetprotocol :: Démarrer (Start () et iInternetProtocol :: Lire () pour demander les données de cette URL .

    Ceci est tout plutôt compliqué, vous pouvez consulter le code réel (BSD-Licensed) ici: http://code.google.com/p /sumatrapdf/source/browse/trunk/src/utils/htmlwindow.cpp


0 commentaires