Disculpe si esta respuesta no es perfecta, pero con la edad de la pregunta y cuántas personas están interesadas, pensé que podría tomar una foto y con suerte ayudar a alguien si no fuera por el OP.
No estoy seguro de cómo VML/Word maneja los datos del portapapeles. Hay varios formatos en el Portapapeles de Windows, uno con el HTML que desea y otro con el formato VML, entonces tiene suerte y esto debería funcionar. Si no, entonces tal vez podría usar esto para limpiar el código en insertar al menos.
Querrá consultar IDocHostUIHandler::TranslateAccelerator. Debe implementar IDocHostUIHandler si aún no lo está. Utiliza ICustomDoc::SetUIHandler para registrarlo, después de cargar el documento HTML (puede ser una página vacía si la usa).
Dentro de TranslateAccelerator necesitas ver nCmdID == IDM_PASTE
. Se dispara antes de que el usuario pegue algo al control HTML, y puede modificar el contenido del portapapeles antes de que se produzca el pegado.
Puede usar algo como GetClipboardData (RegisterClipboardFormat ("Formato HTML")), para obtener el formato HTML del portapapeles. Puede usar SetClipboardData para reemplazar los datos del portapapeles.
Para su uso, si ve que hay varios formatos de portapapeles después de copiar de Word, puede simplemente eliminar uno de los formatos, el que no desea. De esta forma, cuando el control HTML complete el pegado, solo usará el formato que desee.
Tengo ejemplos de código si es necesario, pero son parte de un proyecto grande y usan la biblioteca VCL de Borland para algunas partes. Mi código busca el formato CF_BITMAP en el portapapeles y lo convierte a formato HTML utilizando un archivo PNG. De modo que los usuarios que pegan una captura de pantalla en el control obtienen una imagen PNG más pequeña en lugar de un gran archivo BMP. El concepto es casi lo mismo que lo que quieres.
supongo que la alternativa sería aceptar que crea VML, pero ejecutarlo a través de una> herramienta de conversión VML- SVG después (por ejemplo http://sourceforge.net/ proyectos/vectorconverter /) – Spudley