如果您有一个新的文档视图,您可以将其附加到现有文档数据对象。 有关处理概述,请参见下面 Robust Programming 的。
若要确定是否可以附加视图到现有文档数据对象
在 IVsEditorFactory::CreateEditorInstance的实现,当 IDE 调用 CreateEditorInstance 实现时,中,调用存在的 QueryInterface 文档数据对象。
调用 QueryInterface 使您能够检查现有文档数据对象,在 punkDocDataExisting 参数指定。
如步骤所述,必须查询的确切的接口,但是,依赖于打开文档的编辑器,。
如果未找到在文档数据对象的现有的适当的接口,则返回错误代码以指示的编辑器文档数据对象与编辑器不兼容。
在 OpenStandardEditor的 IDE 的实现,消息框通知您文档已在其他编辑器并询问您是否要将其关闭。
如果您关闭此文档,则 Visual Studio 会调用编辑工厂第二次。 此调用, DocDataExisting 参数包含 NULL 相等。 编辑工厂实现可以然后打开文档中的数据对象拥有编辑。
备注
若要确定是否可以与现有使用文档数据对象,则可以通过将指针还使用接口实现的私有了解到一个私有实现的实际 Visual C++ 类。例如,所有标准编辑器实现 IVsPersistFileFormat,从 IPersist继承。因此,可以调用 GetClassID的 QueryInterface ,,并且,如果在现有的类 ID 文档数据对象与实现的类 ID,可以与文档数据对象一起使用。
可靠编程
当 Visual Studio 调用 CreateEditorInstance 方法的实现时,会将指向现有文档在 punkDocDataExisting 参数的数据对象,因此,如果存在)。 检查在 punkDocDataExisting 返回的文档数据对象确定文档数据对象是否为编辑器适用于如下过程中的步骤 4 中的说明 " 中所述本主题中的。 如果适用,如 支持多文档视图所述,则编辑工厂应为数据提供第二个视图。 否则,它应随后显示一个相应的错误消息。