2011-11-25 12 views
5

En mi aplicación C++ estoy incorporando (a través de COM) un navegador web (Internet Explorer) control (CLSID_WebBrowser).Cómo proporcionar datos de imagen para control web incorporado en C++

Puedo mostrar mi propio html en ese control utilizando el método IHTMLDocument2 :: write() pero si el html tiene el elemento <img src="foo.png">, no se muestra.

Supongo que hay una manera para mí de proporcionar los datos de foo.png de alguna manera al control web, pero no puedo encontrar el lugar correcto para conectar esta funcionalidad.

Necesito tener el control total de proporcionar el contenido de foo.png, por lo que las opciones como usar el protocolo res: // o guardar en el disco y usar el protocolo file: // no son lo suficientemente buenas. Solo quiero conectar mi código de alguna manera para que cuando el control CLSID_WebBrowser incorporado vea <img src="foo.png"> en datos html dados con IHTMLDocument2 :: write() me pida que proporcione estos datos.

Respuesta

3

para responder a mi propia pregunta, la solución que finalmente funcionó para mí es:

  1. registro personalizada IInternetProtocol/IInternetProtocolInfo/vía encargo IClassFactory dado a IInternetSession :: registerNamespace(). Por razones que me parecen un error, tiene que ser un protocolo ya conocido por IE (he elegido "its") aunque sería mucho mejor si fuera mi propio espacio de nombres único.

  2. alimentar datos html a través de IMoniker personalizado a través de IPersistentMoniker :: Load() y asegúrese de que IMoniker :: GetDisplayName() (que es una URL base según la cual se resuelvan los enlaces relativos en html proporcionado) comience con ese protocolo esquema (en mi caso "its: //"). De esta forma, el enlace relativo "foo.png" en los datos html será su: //foo.png a IE, que hará que urlmon llame a IInternetProtocol :: Start() y a IInternetProtocol :: Read() para solicitar los datos de esa URL. .

Todo esto es bastante complicado, se puede ver en el código actual (licencia BSD) aquí: http://code.google.com/p/sumatrapdf/source/browse/trunk/src/utils/HtmlWindow.cpp

0

Puede incrustar un pequeño servidor web como la mangosta y hacer referencia a ese impacto desde allí.

En mangosta, puede adjuntar la devolución de llamada a una ruta específica, devolviendo así imágenes del código C++.

Usamos esto para nuestras herramientas de depuración, donde cada imagen se puede acceder desde una interfaz web

+0

Esa es una posibilidad, pero estoy esperando que hay una solución más simple que sólo implica la interacción con control web directamente. –

0

La solución más sencilla sería un Data URI. Usted alinearía la imagen directamente con IHTMLDocument2::write().

+0

Esa es una posibilidad también, pero el html no es realmente generado por mí y no es sencillo reemplazar el enlace img con datos en html existente –

Cuestiones relacionadas