如果你有新的文档视图,则可以将其附加到现有文档数据对象。
确定是否可以将视图附加到现有文档数据对象
在实现
IVsEditorFactory::CreateEditorInstance
中,在 IDE 调用CreateEditorInstance
实现时调用QueryInterface
现有文档数据对象。通过调用
QueryInterface
,可以检查参数中指定的punkDocDataExisting
现有文档数据对象。但是,必须查询的确切接口取决于打开文档的编辑器,如步骤 4 中所述。
如果找不到现有文档数据对象的相应接口,则向编辑器返回错误代码,指示文档数据对象与编辑器不兼容。
在 IDE 的实现 OpenStandardEditor中,消息框通知你文档在另一个编辑器中打开,并询问是否要关闭它。
如果关闭本文档,Visual Studio 将再次调用编辑器工厂。 在此调用中,该
DocDataExisting
参数等于 NULL。 然后,编辑器工厂实现可以在自己的编辑器中打开文档数据对象。注意
若要确定是否可以使用现有文档数据对象,还可以通过将指针强制转换为专用实现的实际 Visual C++ 类来使用接口实现的私有知识。 例如,所有标准编辑器都实现
IVsPersistFileFormat
,该编辑器继承自 IPersist. 因此,可以调用QueryInterface
GetClassID现有文档数据对象上的类 ID 与实现的类 ID 匹配,则可以使用文档数据对象。
可靠编程
当 Visual Studio 调用方法的 CreateEditorInstance 实现时,它会将指针传回参数中的 punkDocDataExisting
现有文档数据对象(如果存在)。 检查返回 punkDocDataExisting
的文档数据对象,以确定文档数据对象是否适合编辑器,如本主题过程步骤 4 中所述。 如果合适,则编辑器工厂应提供数据的第二个视图,如“支持多个文档视图”中所述。 否则,它应显示适当的错误消息。