【MS CE C++】是否有监听ECInstance的回调函数

老师们,我想实现ECInstace中的属性值,在属性面板上修改后,对所挂接的元素做一定的修改。

是否有监听ECInstance属性值变化的回调函数?

Parents
  • ChangeTrackCallback::AddXAttributeChangedFunction可监控各种XAttribute的改变情况,也包括ECXAttribute。

    ECInstance就是ECXAttribute的体现,而ECXAttribute是XAttribute的特例。XAttribute可将用户定义的一个struct作为扩展属性附加到一个元素上,而ECXAttribute主要是以XML的形式来表达数据的(当然在附加到元素上时为提供工作效率进行了压缩)。

    再扩大点来讲,给元素附加属性又分Linkage和XAttribute两个类。Linkage属性是位于元素内部的,而XAttribute是位于元素之上的。有句英文说的好:

    XAttribute is on the element, not in the element.



  • 谢谢符老师,我测试通了。不过还有一个小问题

    就是在回调函数里,如何判断当前XAttributeHandleCP xAttr 是不是我定义的ECInstance?

    对这个问题,经测试有个初步认识,请老师看看对否?

    1)通过    xAttr->GetHandlerId()的  MajorId,MinorId  还有 xAttr->GetId()来判断。

    2) xAttr->GetHandlerId()的  MajorId,MinorId  我这边测试发现,只要属于ECInstance附加上去的,MajorId=22271,MinorId=0。 那么在回调函数里,就用MajorId=22271,MinorId=0 来判断是否为ECInstance

    3)xAttr->GetId() 可以在创建ECInstance时,来指定特定的一个值; 那么在回调函数里,用这个值来判定,是否为之前所创建的那个ECInstance

    我不确定的是上述第2)点 MajorId=22271,MinorId=0是否 为MS内部默认的,都这么设置的? 若不是,上述方法就不成立,还有没其它方法来解决此问题?

      

    Answer Verified By: 湖北-阿崇 

Reply
  • 谢谢符老师,我测试通了。不过还有一个小问题

    就是在回调函数里,如何判断当前XAttributeHandleCP xAttr 是不是我定义的ECInstance?

    对这个问题,经测试有个初步认识,请老师看看对否?

    1)通过    xAttr->GetHandlerId()的  MajorId,MinorId  还有 xAttr->GetId()来判断。

    2) xAttr->GetHandlerId()的  MajorId,MinorId  我这边测试发现,只要属于ECInstance附加上去的,MajorId=22271,MinorId=0。 那么在回调函数里,就用MajorId=22271,MinorId=0 来判断是否为ECInstance

    3)xAttr->GetId() 可以在创建ECInstance时,来指定特定的一个值; 那么在回调函数里,用这个值来判定,是否为之前所创建的那个ECInstance

    我不确定的是上述第2)点 MajorId=22271,MinorId=0是否 为MS内部默认的,都这么设置的? 若不是,上述方法就不成立,还有没其它方法来解决此问题?

      

    Answer Verified By: 湖北-阿崇 

Children