实现每个实例的动态属性
除了创建应用于 的所有实例的动态属性外,还可以将动态属性应用于特定对象。以下接口提供了定义每个实例动态属性的方法:AcRxClass
这些接口与以下全局宏一起使用:
应用程序通过在一个或多个 COM 对象上实现接口来管理每个实例的动态属性。这些 COM 对象的实例存储在“属性”选项板的协议扩展框架中。IPropertySource 当“属性”选项板查询选定对象的属性时,它会将该对象的指针传递到其框架中每个实例的方法。如果实现检测到指向限定对象的指针,它将生成并返回动态属性。这些生成的动态属性是 或 的实例。IUnknownGetProperties()IPropertySourceGetProperties()IDynamicPropertyIDynamicProperty2 每个实例都有一个唯一的名称,它通过其方法提供。AutoCAD 将所有这些名称映射到类的单个全局实例中。您可以使用宏访问此实例。IPropertySourceget_Name()OPMPerInstancePropertySourcesGET_OPM_PERINSTANCE_SOURCES() 若要在全局列表中注册属性源,首先必须实例化属性源类。当您有指向其实例的指针时,请调用该函数,并传入属性源的名称和实例指针。以下伪代码演示了此技术:OPMPerInstancePropertySources::SetPropertySourceAt() CMyPropSource* pPropSrc = new CMyPropSource(); // implements // IPropertySource BSTR* pName; hr = pPropSrc->get_Name(pName); if SUCCEEDED(hr) GET_OPM_PERINSTANCE_SOURCES()->SetPropertySourceAt(pName, pPropSrc); 若要在“属性”选项板中可用,属性源必须与对象相关联。该类执行此服务。实例对每个实例属性的作用与对象对类范围动态属性的作用类似:它们在动态数据与其动态数据之间建立链接。对于每个对象,您可以使用宏检索实例。在返回的指针上调用该方法以注册对象。此机制显示在以下伪代码中:AcRxClassOPMPerInstancePropertyExtensionOPMPerInstancePropertyExtensionIPropertyManagerAcRxClassAcRxClassOPMPerInstancePropertyExtension GET_OPM_PERINSTANCE_EXTENSION_PROTOCOL()OPMPerInstancePropertyExtension::AddObjectPropertySourceName()IPropertySource AcRxClass* pAcrxClass = AcDbMyEnt::desc(); GET_OPM_PERINSTANCE_EXTENSION_PROTOCOL(pAcrxClass)-> AddObjectPropertySourceName(pName); 和注册之间的主要区别在于注册的内容。动态属性本身已注册到对象中。注册后,这些属性将可用于关联 .每个实例的动态属性不会注册到任何对象。相反,实例将注册到实例中。该对象在运行时根据请求生成每个实例的属性,因为它认为合适。IPropertyManager2IPropertySourceIPropertyManager2AcRxClassIPropertySourceOPMPerInstancePropertyExtensionIPropertySource 父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-3-5 17:55
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.