XNA Game Studio 以某种方式扩展了 Visual Studio 中的属性窗口,添加了两个新的组合框“Importer”和“Processor”。这些组合框包含在当前解决方案的代码中定义的可用导入器和处理器,当这些字段发生更改时,设置将保存到项目文件中相应项目的元数据中。
我很好奇他们是如何做到这一点的?任何信息,将不胜感激。
XNA Game Studio 以某种方式扩展了 Visual Studio 中的属性窗口,添加了两个新的组合框“Importer”和“Processor”。这些组合框包含在当前解决方案的代码中定义的可用导入器和处理器,当这些字段发生更改时,设置将保存到项目文件中相应项目的元数据中。
我很好奇他们是如何做到这一点的?任何信息,将不胜感激。
有一篇古老但很好的文章解释了它是如何完成的背后的原则。基本上它归结为实现IExtenderProvider
接口并确定它应该通过 扩展哪些对象CanExtendMethod
,使用对象的 CATID 来识别它。对于要扩展的对象,您使用该GetExtender
方法返回一个扩展器。请注意,扩展器必须标记为ComVisible
。
扩展器提供程序在注册表中静态注册或使用代码动态注册。文档很薄,但是这个页面说扩展程序能够添加属性,也可以隐藏或更改现有属性。