Поделиться через


Поддержка представления нескольких документов

Вы можете предоставить несколько представлений документа, создав отдельные данные документа и объекты представления документов для редактора. Некоторые случаи, в которых полезно дополнительное представление документов:

  • Поддержка нового окна: вы хотите, чтобы редактор предоставлял два или более представлений одного типа, чтобы пользователь, у которого уже открыто окно в редакторе, можно открыть новое окно, выбрав команду "Создать окно" в меню "Окно".

  • Поддержка представления формы и кода: вы хотите, чтобы редактор предоставлял представления различных типов. Например, Visual Basic предоставляет представление формы и представление кода.

    Дополнительные сведения об этом см. в процедуре CreateEditorInstance в файле EditorFactory.cs в проекте пользовательского редактора, созданном шаблоном пакета Visual Studio. Дополнительные сведения об этом проекте см. в пошаговом руководстве по созданию пользовательского редактора.

Синхронизация представлений

При реализации нескольких представлений объект данных документа отвечает за сохранение всех представлений, синхронизированных с данными. Интерфейсы обработки событий можно использовать для синхронизации нескольких VsTextBuffer представлений с данными.

Если объект не используется VsTextBuffer для синхронизации нескольких представлений, необходимо реализовать собственную систему событий для обработки изменений, внесенных в объект данных документа. Для актуальности нескольких представлений можно использовать различные уровни детализации. При настройке максимальной детализации при вводе в одном представлении другие представления обновляются немедленно. С минимальной степенью детализации другие представления не обновляются до их активации.

Определение того, открыты ли данные документа

Запущенная таблица документов (RDT) в интегрированной среде разработки (IDE) помогает отслеживать, открыты ли данные для документа, как показано на следующей схеме.

Рисунок DocDataView

Несколько представлений

По умолчанию каждое представление (объект представления документа) содержится в собственном окне (IVsWindowFrame). Как уже отмечалось, данные документа могут отображаться в нескольких представлениях. Для этого Visual Studio проверка RDT, чтобы определить, открыт ли документ в редакторе. При вызове CreateEditorInstance интегрированной среды разработки для создания редактора значение, отличное от NULL, возвращаемое в параметре punkDocDataExisting , указывает, что документ уже открыт в другом редакторе. Дополнительные сведения о том, как функции RDT см. в статье "Запуск таблицы документов".

IVsEditorFactory В реализации изучите объект данных документа, возвращенный в punkDocDataExisting документе, чтобы определить, подходили ли данные документа для редактора. (Например, только HTML-данные должны отображаться редактором HTML.) Если это уместно, фабрика редактора должна предоставить второе представление для данных. punkDocDataExisting Если параметр не NULLзадан, возможно, объект данных документа открыт в другом редакторе или, скорее всего, данные документа уже открыты в другом представлении с тем же редактором. Если данные документа открыты в другом редакторе, который не поддерживает фабрика редакторов, Visual Studio не сможет открыть фабрику редакторов. Дополнительные сведения см. в разделе "Практическое руководство. Присоединение представлений к данным документа".