保存自定义文档
环境会处理“保存”、“另存为”和“全部保存”命令。 当用户在“文件”菜单上点击“保存”、“另存为”或“全部保存”或关闭解决方案,导致“全部保存”时,将出现以下过程。
自定义编辑器的“保存”、“另存为”和“全部保存”命令处理
以下步骤中详细介绍了此过程:
对于“保存”和“另存为”命令,环境使用 SVsShellMonitorSelection 服务来确定活动文档窗口,以及应保存哪些项目。 活动文档窗口已知后,环境将查找正在运行的文档表中文档的层次结构指针和项标识符 (itemID)。 有关详细信息,请参阅运行文档表。
对于“全部保存”命令,环境将使用正在运行的文档表中的信息来编译要保存的所有项的列表。
当解决方案收到 QueryStatus 调用时,它会循环访问所选项的集合(即 SVsShellMonitorSelection 服务公开的多个选择)。
在所选内容中的每个项上,解决方案使用层次结构指针调用 IsItemDirty 方法,以确定是否应启用“保存”菜单命令。 如果一个或多个项变脏,则启用“保存”命令。 如果层次结构使用标准编辑器,则层次结构通过调用 IsDocDataDirty 方法将查询脏状态委托给编辑器。
在变脏的每个选定项上,解决方案使用层次结构指针对相应的层次结构调用 SaveItem 方法。
对于自定义编辑器,文档数据对象与项目之间的通信是私密的。 因此,任何特殊的持久性问题都会在这两个对象之间得到处理。
注意
如果实现自己的持久性,请确保调用 QuerySaveFiles 方法以节省时间。 此方法会进行检查,确保保存文件是安全的(例如,文件不是只读文件)。