在V8i以及之前的MDL中,mdlScanCriteria_setReturnType函数的最后一个参数能控制是否返回Cell中(或ComplexShape、ComplexChain等)的子元素。但这种用法不是推荐的用法,在CONNECT版中目前也不支持了。那如何能扫描到Cell下的子元素呢?
请看如下代码:
/*-------------------------------------------------------- | scanNestDemo +-------------------------------------------------------*/ int scanCallback(ElementRefP elRef, void* arg, ScanCriteriaP pSC) { ElementHandle eh(elRef, pSC->GetModelRef()); WString promptStr; eh.GetHandler().GetDescription(eh, promptStr, 128); mdlDialog_dmsgsPrint(promptStr.GetWCharCP()); for (ChildElemIter child(eh); child.IsValid(); child = child.ToNext()) scanCallback(child.GetElementRef(), nullptr, pSC); return SUCCESS; } void scanNestDemo() { ScanCriteriaP pScanCriteria = ScanCriteria::Create(); pScanCriteria->SetDrawnElements(); pScanCriteria->SetModelRef(ACTIVEMODEL); mdlScanCriteria_setReturnType(pScanCriteria, MSSCANCRIT_ITERATE_ELMREF, FALSE, FALSE); pScanCriteria->SetElemRefCallback((PFScanElemRefCallback)scanCallback, nullptr); pScanCriteria->Scan(); ScanCriteria::Delete(pScanCriteria); }