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