将视图附加到文档数据

如果你有新的文档视图,则可以将其附加到现有文档数据对象。

确定是否可以将视图附加到现有文档数据对象

  1. 实现 CreateEditorInstance

  2. 在实现IVsEditorFactory::CreateEditorInstance中,在 IDE 调用CreateEditorInstance实现时调用QueryInterface现有文档数据对象。

    通过调用 QueryInterface ,可以检查参数中指定的 punkDocDataExisting 现有文档数据对象。

    但是,必须查询的确切接口取决于打开文档的编辑器,如步骤 4 中所述。

  3. 如果找不到现有文档数据对象的相应接口,则向编辑器返回错误代码,指示文档数据对象与编辑器不兼容。

    在 IDE 的实现 OpenStandardEditor中,消息框通知你文档在另一个编辑器中打开,并询问是否要关闭它。

  4. 如果关闭本文档,Visual Studio 将再次调用编辑器工厂。 在此调用中,该 DocDataExisting 参数等于 NULL。 然后,编辑器工厂实现可以在自己的编辑器中打开文档数据对象。

    注意

    若要确定是否可以使用现有文档数据对象,还可以通过将指针强制转换为专用实现的实际 Visual C++ 类来使用接口实现的私有知识。 例如,所有标准编辑器都实现 IVsPersistFileFormat,该编辑器继承自 IPersist. 因此,可以调用QueryInterfaceGetClassID现有文档数据对象上的类 ID 与实现的类 ID 匹配,则可以使用文档数据对象。

可靠编程

当 Visual Studio 调用方法的 CreateEditorInstance 实现时,它会将指针传回参数中的 punkDocDataExisting 现有文档数据对象(如果存在)。 检查返回 punkDocDataExisting 的文档数据对象,以确定文档数据对象是否适合编辑器,如本主题过程步骤 4 中所述。 如果合适,则编辑器工厂应提供数据的第二个视图,如“支持多个文档视图”中所述。 否则,它应显示适当的错误消息。