如何:将视图附加到文档数据

适用范围:yesVisual Studio noVisual Studio for Mac noVisual Studio Code

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

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

  1. 实现 CreateEditorInstance

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

    调用 QueryInterface 可检查现有文档数据对象,该对象在 参数中 punkDocDataExisting 指定。

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

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

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

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

    注意

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

可靠编程

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

另请参阅