运行文档表
IDE 在一个名为的内部结构维护列出所有当前打开的文档运行文档表 (RDT)。 这在内存列表包括所有打开的文档,无论这些是否文档当前编辑。 文档是保留的所有项,包括在一个编辑器以及文件打开的存储过程在项目或主项目文件 (例如, *.vcproj 文件)。
运行的元素文档表
运行文档表包含以下项。
元素 |
说明 |
---|---|
文档标记 |
唯一标识文档数据对象的字符串。 这是例如管理文件的项目系统的绝对文件路径 (, C: \MyProject\MyFile)。 此字符串为项目还使用保存在存储除了文件系统之外,如存储过程在数据库中。 在这种情况下,项目系统可以开发它可以标识和能分析确定如何将文档存储的一个字符串。 |
层次结构所有者 |
拥有文档的层次结构对象,如由 IVsHierarchy 接口。 |
项 ID |
特定项目的项 ID 在层次结构中。 此值在整个中是唯一的文档在拥有此文档的层次结构,但此值不能保证唯一。不同的层次结构之间。 |
文档数据对象 |
在最小权限,这是 IUnknown 对象。 IDE 不为自定义编辑器的要求在 IUnknown 接口以外的任何特定接口文档数据对象。 但是,对于标准编辑, IVsPersistDocData2 接口的编辑实现所需的处理文件持久性从项目中调用。 有关更多信息,请参见 保存标准文档。 |
Flags |
控件的标志文档是否保存,读取还是编辑锁定是应用的,依此类推,可以指定,当项添加到 RDT 时。 有关更多信息,请参见 _VSRDTFLAGS。 |
编辑锁计数 |
计数编辑锁。 编辑锁定指示某位版本的文档打开进行编辑。 在计数编辑锁定转换为零,用户会提示保存文档,因此,如果已被修改。 例如,在中,在使用 新窗口 命令后,您在编辑器中打开文档,编辑锁为该在 RDT 添加文档。 对于要设置的编辑锁定,文档必须具有层次结构或项 ID |
读取锁计数 |
计数读取锁。 一个交叉点读取 lock 指示文档通过某种机制读取例如向导。 一个交叉点读取 lock 到文档负运行在 RDT,则指示文档时无法编辑。 可以设置一将读取锁,即使文档没有层次结构或项 ID 此函数在 RDT 允许您在内存中的文档和输入它,而无需所有层次结构拥有的文档。 很少使用此功能。 |
锁持有者 |
IVsDocumentLockHolder 接口的实例。 锁持有者按功能实现例如打开和编辑文档编辑器的外部的向导。 ,它仍然编辑时,锁持有者允许该函数添加编辑固定到文档防止在关闭文档。 通常,请编辑锁定只添加文档窗口 (即编辑)。 |
在 RDT 的每个具有单个层次结构或项 ID 与其关联,通常对应于在项目的节点。 所有文档可编辑的按层次结构通常拥有。 投影到 RDT 控件所做的项,或更精确的层次结构,当前拥有编辑的文档数据对象。 使用在 RDT 的信息, IDE 会阻止文档次只能打开已多个项目。
该层次结构。 RDT 还控制数据持久性并使用该信息更新 保存 和 保存 对话框。 当用户修改文档 文件 然后从菜单中选择 退出 命令,当前修改的 IDE 提示为 保存更改 对话框显示其所有项目和项目项。 文档保存将允许用户选择。 中的文档保存 (即会更改) 的这些文档从 RDT 生成。 在对话框 保存更改 希望看到在退出应用程序的所有项都应在 RDT 的记录。 RDT 坐标保存和用户是否会提示有关保存操作使用在标记项指定的值为文档的每个文档。 有关 RDT 标志的更多信息,请参见 _VSRDTFLAGS 枚举。
编辑锁定和读取 Lock
编辑锁定,并读取 lock 位于 RDT。 文档窗口增加和减少编辑锁。 因此,那么,当用户打开新文档窗口时,编辑锁计数由一个递增。 当数字编辑锁定达到零时,该层次结构终止保存或保存数据。关联的文档。 该层次结构可以将数据保持在所有情况下,包括保存为文件或将其作为项目中储存库。 在 IVsRunningDocumentTable 接口可以使用 LockDocument 方法添加、编辑锁定和读取 lock 和 UnlockDocument 方案中移除这些锁。
通常,那么,当编辑的文档窗口实例化时,窗架自动将文档的一个编辑锁定 RDT。 但是,在中,如果创建不使用标准文档窗口文档的自定义视图 (即它不实现 IVsWindowFrame 接口),则您需要设置自己编辑锁。 例如,在向导中,文档在编辑器中编辑,而不会打开。 为了使文档向导将打开的锁,并且类似的实体,这些实体必须实现 IVsDocumentLockHolder 接口。 注册文档锁定持有人,在 IVsDocumentLockHolder 实现调用 RegisterDocumentLockHolder 方法,并传递。 这样做将文档锁持有者到 RDT。 ,如果通过特定的工具窗口,打开文档实现的文档锁持有者另一种情况是。 在这种情况下,您无法将工具窗口关闭文档。 但是,通过注册为 RDT 的文档锁定持有人, IDE 会调用 CloseDocumentHolder 方法的实现提示文档的关闭。
访问正在运行的其他用法文档表
在 IDE 中其他实体使用 RDT 获取有关文档。 例如,在中,在它包含文件后,新版本的源控制管理器使用 RDT 告知系统重新加载在编辑器的文档。 为此,源控制管理器查找在 RDT 的文件确定任意这些指标是否已打开。 如果已定义,则源控制管理器首先检查该层次结构执行 ReloadItem 方法。 如果该项不执行 ReloadItem 方法,则源控制管理器直接检查 ReloadDocData 方法的实现在文档数据对象的。
IDE 还使用 RDT 复出 (在前面请将中打开文档,因此,如果文档的用户请求。 有关更多信息,请参见 演示使用打开文件命令的文件。 若要确定文件是否已在 RDT,请执行下一列。
查看文档的标记的查询 (即完整文件路径),如果项目是打开的。
使用该层次结构或请求项目系统的项 ID 完整文件路径,然后查找项在 RDT。