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


Определение того, какой редактор открывает файл в проекте

Когда пользователь открывает файл в проекте, среда проходит процесс опроса, в конечном итоге открыв соответствующий редактор или конструктор для этого файла. Начальная процедура, применяемая средой, одинакова как для стандартных, так и для пользовательских редакторов. Среда использует различные критерии при опросе редактора, используемого для открытия файла, и VSPackage должен координироваться с средой во время этого процесса.

Например, когда пользователь выбирает команду Open из меню "Файл", а затем выбирает filename.rtf (или любой другой файл с расширением RTF), среда вызывает IsDocumentInProject реализацию для каждого проекта, в конечном итоге велоспортить все экземпляры проекта в решении. Проекты возвращают набор флагов, определяющих утверждения в документе по приоритету. Используя самый высокий приоритет, среда вызывает соответствующий OpenItem метод. Дополнительные сведения о процессе опроса см. в разделе "Добавление шаблонов проектов и элементов проекта".

Проект "Прочие файлы" утверждает все файлы, которые не утверждаются другими проектами. Таким образом, пользовательские редакторы могут открывать документы до открытия стандартных редакторов. Если проект "Прочие файлы" утверждает файл, среда вызывает OpenStandardEditor метод для открытия файла с помощью стандартного редактора. Среда проверка свой внутренний список зарегистрированных редакторов для одного из них, обрабатывающего RTF-файлы. Этот список находится в реестре по следующему разделу:

HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio<\version>\Editors\<editor factory guid>\Extensions

Среда также проверка идентификаторы классов в ключе HKEY_CLASSES_ROOT\CLSID для любых объектов с вложенным ключом DocObject. Если расширение файла найдено там, внедренная версия приложения, например Microsoft Word, создается на месте в Visual Studio. Эти объекты документов должны быть составными файлами, реализующими IPersistStorage интерфейс, или объект должен реализовать IPersistFileFormat интерфейс.

Если в реестре нет фабрики редакторов для RTF-файлов, среда будет выглядеть в разделе HKEY_CLASSES_ROOT\.rtf и открывает указанный там редактор. Если расширение файла не найдено в HKEY_CLASSES_ROOT, среда использует текстовый редактор Visual Studio core для открытия файла, если это текстовый файл.

Если основной текстовый редактор завершается ошибкой, что происходит, если файл не является текстовым файлом, среда использует его двоичный редактор для файла.

Если среда находит редактор расширения RTF в реестре, загружает VSPackage, реализующий эту фабрику редакторов. Среда вызывает SetSite метод в новом VSPackage. VsPackage вызывает QueryService SID_SVsRegistorEditorRegisterEditor метод для регистрации фабрики редакторов в среде.

Теперь среда повторно проверка содержит внутренний список зарегистрированных редакторов, чтобы найти только что зарегистрированную фабрику редакторов для RTF-файлов. Среда вызывает реализацию CreateEditorInstance метода, передавая имя файла и тип представления для создания.