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


Запуск таблицы документов

Интегрированная среда разработки поддерживает список всех открытых документов в внутренней структуре, называемой работающей таблицей документов (RDT). Этот список включает все открытые документы в памяти независимо от того, редактируются ли эти документы в настоящее время. Документ — это любой элемент, который сохраняется, включая файлы в проекте или основной файл проекта (например, vcxproj-файл).

Элементы таблицы выполняющихся документов

Запущенная таблица документов содержит следующие записи.

Элемент Description
Моникер документов Строка, которая однозначно идентифицирует объект данных документа. Это будет абсолютный путь к файлу для системы проекта, которая управляет файлами (например, C:\MyProject\MyFile). Эта строка также используется для проектов, сохраненных в хранилищах, отличных от файловых систем, таких как хранимые процедуры в базе данных. В этом случае система проекта может придумать уникальную строку, которую он может распознать и, возможно, проанализировать, чтобы определить, как хранить документ.
Владелец иерархии Объект иерархии, принадлежащий документу, представленный интерфейсом IVsHierarchy .
ИД элемента Идентификатор элемента для определенного элемента в иерархии. Это значение уникально среди всех документов в иерархии, принадлежащих этому документу, но это значение не гарантируется уникальным для разных иерархий.
Объект данных документа По крайней мере, это IUnknown

. Интегрированная среда разработки не требует какого-либо конкретного интерфейса за пределами IUnknown интерфейса для объекта данных документа пользовательского редактора. Однако для стандартного редактора IVsPersistDocData2 реализация интерфейса редактора требуется для обработки вызовов сохраняемости файлов из проекта. Дополнительные сведения см. в разделе "Сохранение стандартного документа".
Флаги Флаги, которые определяют, сохраняется ли документ, применяется ли блокировка чтения или редактирования и т. д., можно указать при добавлении записей в RDT. Дополнительные сведения см. в описании перечисления _VSRDTFLAGS.
Изменение количества блокировок Количество блокировок редактирования. Блокировка редактирования указывает, что у некоторых редакторов есть документ, открытый для редактирования. Когда количество блокировок редактирования переходит к нулю, пользователю будет предложено сохранить документ, если он был изменен. Например, каждый раз, когда вы открываете документ в редакторе с помощью команды "Новое окно ", блокировка редактирования добавляется для этого документа в RDT. Чтобы задать блокировку редактирования, документ должен иметь идентификатор иерархии или элемента.
Число блокировок чтения Количество блокировок чтения. Блокировка чтения указывает, что документ считывается с помощью некоторых механизмов, таких как мастер. Блокировка чтения содержит документ в режиме RDT, указывая, что документ не может быть изменен. Блокировку чтения можно задать, даже если документ не имеет идентификатора иерархии или элемента. Эта функция позволяет открывать документ в памяти и вводить его в RDT без владения документом в любой иерархии. Эта функция редко используется.
Держатель блокировки Экземпляр IVsDocumentLockHolder интерфейса. Держатель блокировки реализуется такими функциями, как мастера, которые открывают и редактируют документы за пределами редактора. Держатель блокировки позволяет компоненту добавить блокировку редактирования в документ, чтобы предотвратить закрытие документа во время его редактирования. Как правило, блокировки редактирования добавляются только окнами документов (то есть редакторами).

Каждая запись в RDT имеет уникальную иерархию или идентификатор элемента, связанный с ним, который обычно соответствует одному узлу в проекте. Все документы, доступные для редактирования, обычно принадлежат иерархии. Записи, сделанные в элементе управления удаленным рабочим rdT, который проект или ( более точно) принадлежит иерархии, в настоящее время владеет редактируемым объектом данных документа. Используя сведения в RDT, интегрированная среда разработки может предотвратить открытие документа несколькими проектами за раз.

Иерархия также управляет сохраняемостью данных и использует сведения в RDT для обновления диалоговых окон "Сохранить и сохранить как ". Когда пользователи изменяют документ, а затем выберите команду exit из меню "Файл ", интегрированная среда разработки запрашивает их с помощью диалогового окна "Сохранить изменения " для отображения всех проектов и элементов проекта, которые в настоящее время изменяются. Это позволяет пользователям выбирать, какие документы нужно сохранить. Список документов для сохранения (т. е. тех документов, которые имеют изменения) создается из RDT. Все элементы, которые вы ожидаете увидеть в диалоговом окне "Сохранить изменения" при выходе из приложения, должны иметь записи в RDT. RDT координирует сохранение документов и запрашивает ли пользователь операцию сохранения с помощью значений, указанных в записи Flags для каждого документа. Дополнительные сведения о флагах RDT см. в _VSRDTFLAGS перечислении.

Изменение блокировок и блокировок чтения

Изменение блокировок и блокировок чтения находится в RDT. Окно документа увеличивается и уменьшает блокировку редактирования. Таким образом, когда пользователь открывает новое окно документа, число блокировок редактирования увеличивается по одному. Когда число блокировок редактирования достигает нуля, иерархия будет сигнализировать о сохранении или сохранении данных для связанного документа. Иерархия может сохранять данные в любом случае, включая сохранение в виде файла или элемента в репозитории. Метод в интерфейсе IVsRunningDocumentTable можно использовать LockDocument для добавления блокировок редактирования и блокировки чтения, а UnlockDocument также метода для удаления этих блокировок.

Как правило, при создании экземпляра окна документа для редактора кадр окна автоматически добавляет блокировку редактирования для документа в RDT. Однако если вы создаете пользовательское представление документа, которое не использует стандартное окно документа (то есть оно не реализует IVsWindowFrame интерфейс), необходимо задать собственную блокировку редактирования. Например, в мастере документ редактируется без открытия в редакторе. Чтобы блокировки документов открывались мастерами и аналогичными сущностями, эти сущности должны реализовать IVsDocumentLockHolder интерфейс. Чтобы зарегистрировать держатель блокировки документов, вызовите RegisterDocumentLockHolder метод и передайте реализацию IVsDocumentLockHolder . Это позволяет добавить держатель блокировки документов в RDT. Другой сценарий реализации держателя блокировки документов заключается в том, что вы открываете документ с помощью специального окна инструментов. В этом экземпляре окно инструментов не удается закрыть документ. Однако путем регистрации в качестве владельца блокировки документов в RDT интегрированная среда разработки может вызвать реализацию CloseDocumentHolder метода, чтобы заставить закрыть документ.

Другие виды использования запущенной таблицы документов

Другие сущности в интегрированной среде разработки используют RDT для получения сведений о документах. Например, диспетчер управления версиями использует RDT, чтобы сообщить системе перезагрузить документ в редакторе после получения последней версии файла. Для этого диспетчер управления версиями ищет файлы в RDT, чтобы узнать, открыты ли какие-либо из них. Если они есть, диспетчер управления версиями сначала проверка, чтобы увидеть, что иерархия реализует ReloadItem метод. Если проект не реализует ReloadItem метод, диспетчер управления версиями проверка для реализации ReloadDocData метода непосредственно в объекте данных документа.

Интегрированная среда разработки также использует RDT для повторного просмотра (довести до переднего плана) открытый документ, если пользователь запрашивает этот документ. Дополнительные сведения см. в разделе "Отображение файлов" с помощью команды "Открыть файл". Чтобы определить, открыт ли файл в RDT, выполните одно из следующих действий.

  • Запрос моникера документа (т. е. полный путь к документу), чтобы узнать, открыт ли элемент.

  • Используйте идентификатор иерархии или элемента, чтобы задать системе проекта полный путь к документу, а затем просмотреть элемент в RDT.

См. также