Compatibilidad con vistas de varios documentos
Puede proporcionar más de una vista de un documento mediante la creación de datos de documento independientes y objetos de vista de documentos para el editor. Algunos casos en los que una vista de documento adicional sería útil son:
Soporte de nueva ventana: quiere que el editor proporcione dos o más vistas del mismo tipo para que un usuario que ya tenga una ventana abierta en el editor pueda abrir una nueva ventana seleccionando el comando Nueva ventana en el menú Ventana.
Soporte de vista de código y de formulario: quiere que el editor proporcione vistas de diferentes tipos. Visual Basic, por ejemplo, proporciona una vista de formulario y una vista de código.
Para obtener más información sobre esto, consulte el procedimiento CreateEditorInstance en el archivo EditorFactory.cs en el proyecto de editor personalizado creado por la plantilla de paquete de Visual Studio. Para obtener más información, consulte Tutorial: Creación de un editor personalizado.
Sincronizar vistas
Al implementar varias vistas, el objeto de datos del documento es responsable de mantener los datos sincronizados en todas las vistas. Puede usar las interfaces de control de eventos en VsTextBuffer para sincronizar los datos de varias vistas.
Si no usa el objeto VsTextBuffer para sincronizar varias vistas, debe implementar su propio sistema de eventos para controlar los cambios realizados en el objeto de datos del documento. Puede usar diferentes niveles de granularidad para mantener actualizadas varias vistas. Con una configuración de granularidad máxima, a medida que escribe en una vista las demás vistas se actualizan inmediatamente. Con la granularidad mínima, las otras vistas no se actualizan hasta que se activan.
Determinar si los datos del documento ya están abiertos
La tabla de documentos en ejecución (RDT) en el entorno de desarrollo integrado (IDE) ayuda a realizar un seguimiento de si los datos de un documento ya están abiertos, como se muestra en el diagrama siguiente.
Varias vistas
De manera predeterminada, cada vista (objeto de vista de documento) está contenida en su propio marco de ventana (IVsWindowFrame). Como ya se ha indicado, sin embargo, los datos del documento se pueden mostrar en varias vistas. Para habilitar esto, Visual Studio comprueba el RDT para determinar si el documento en cuestión ya está abierto en un editor. Cuando el IDE llama a CreateEditorInstance para crear el editor, un valor distinto de NULL devuelto en el parámetro punkDocDataExisting
indica que el documento ya está abierto en otro editor. Para obtener más información sobre cómo funciona RDT, consulte Tabla de documentos en ejecución.
En la implementación IVsEditorFactory, examine el objeto de datos de documento devuelto en punkDocDataExisting
para determinar si los datos del documento son adecuados para el editor. (Por ejemplo, solo un editor HTML debe mostrar los datos HTML). Si es adecuado, el generador del editor debe proporcionar una segunda vista para los datos. Si el parámetro punkDocDataExisting
no es NULL
, es posible que el objeto de datos del documento esté abierto en otro editor o, más probable, que los datos del documento ya estén abiertos en una vista diferente dentro del mismo editor. Si los datos del documento están abiertos en un editor diferente que el generador de editores no admite, Visual Studio no puede abrir el generador de editores. Para obtener más información, vea Cómo: Adjuntar vistas a datos de documentos.