dans mon application C ++ Je l'incorpore (via COM) un navigateur Web (Internet Explorer) (CLSID_WebBrowser). P>
Je peux afficher mon propre HTML dans ce contrôle en utilisant la méthode IHTMLDOCument2 :: Ecrire (), mais si le code HTML a 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é? P>
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 code>, il n'est pas affiché. < / p>
code> dans les données HTML données avec ihtmldocument2 :: écrire () il me demandera de fournir ceci Données. P>
3 Réponses :
Vous pouvez intégrer un petit serveur Web tel que Mongoose et référencez-les de là. P>
en mangouste, vous pouvez attacher le rappel à un chemin spécifique, renvoyant ainsi des images du code C ++. P>
Nous utilisons cela pour nos outils de débogage, où chaque image est accessible à partir d'une interface Web p>
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.
La solution la plus simple serait un URI de données . Vous étielliez l'image directement avec ihtmldocument2 :: écrire () code>. P>
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
Pour répondre à ma propre question, la solution qui a finalement travaillé pour moi est la suivante: p>
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. P> < / li>
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 . P> li> ol>
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 P>