CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

实现每个实例的动态属性

2022-12-31 11:20| 发布者: admin| 查看: 281| 评论: 0|来自: AutoCAD

除了创建应用于 的所有实例的动态属性外,还可以将动态属性应用于特定对象。以下接口提供了定义每个实例的动态属性的方法:AcRxClass

  • IPropertySource
  • OPMPerInstancePropertySources
  • OPMPerInstancePropertyExtension
  • OPMPerInstancePropertyExtensionFactory

这些接口与以下全局宏一起使用:

  • GET_OPM_PERINSTANCE_SOURCES
  • GET_OPM_PERINSTANCE_EXTENSION_PROTOCOL
  • GET_OPM_PERINSTANCE_CREATE_PROTOCOL

应用程序通过在一个或多个 COM 对象上实现接口来管理每个实例的动态属性。这些 COM 对象的实例存储在“特性”选项板的协议扩展框架中。IPropertySource

当“特性”选项板查询选定对象的特性时,它会将该对象的指针传递给其框架中每个实例的方法。如果实现检测到指向限定对象的指针,它将生成并返回动态属性。这些生成的动态属性是实例 ofor。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);

要可用于“特性”选项板,您的特性源必须与对象相关联。类执行此服务。实例对于每个实例属性的作用与对象对类范围的动态属性的作用类似:它们在 anand 其动态数据之间建立链接。对于每个对象,您可以使用宏检索一个实例。在返回的指针上调用该方法以注册您的对象。此机制显示在以下伪代码中:AcRxClassOPMPerInstancePropertyExtensionOPMPerInstancePropertyExtensionIPropertyManagerAcRxClassAcRxClassOPMPerInstancePropertyExtension GET_OPM_PERINSTANCE_EXTENSION_PROTOCOL()OPMPerInstancePropertyExtension::AddObjectPropertySourceName()IPropertySource

AcRxClass* pAcrxClass = AcDbMyEnt::desc();
GET_OPM_PERINSTANCE_EXTENSION_PROTOCOL(pAcrxClass)->
AddObjectPropertySourceName(pName);

注册和注册之间的主要区别在于注册的内容。动态属性本身注册到对象。注册后,这些属性将可用于关联的所有实例。每个实例的动态属性不会注册到任何对象。相反,实例是向实例注册的。该对象在运行时根据请求生成每个实例的属性,因为它认为合适。IPropertyManager2IPropertySourceIPropertyManager2AcRxClassIPropertySourceOPMPerInstancePropertyExtensionIPropertySource


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 13:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部