在CAD的很多操作中都会有需要用户选择实体的时候,这里将我最近项目中用到的方法分享一下,程序原意是希望用户选择一个单行文本或者多行文本,并返回所选文本的内容,直接上代码:
CString CPaintBar::GetEncyrptCode() { CString sNull = _T(""); //选择单文本或者多文本 ads_name ent; ads_point pt; int nRs = acedEntSel(_T("\n请选择加入的内容:"), ent, pt); if (RTNORM != nRs) { AfxMessageBox(_T("获取失败!")); acedSSFree(ent); return sNull; } //获得所选实体Id AcDbObjectId entId; Acad::ErrorStatus es = acdbGetObjectId(entId, ent); if (Acad::eOk != es) { AfxMessageBox(_T("获取id失败!")); acedSSFree(ent); return sNull; } acedSSFree(ent); //判断所选实体是否是单文本或者多文本 AcDbEntity *pEnt = NULL; es = acdbOpenObject(pEnt, entId, AcDb::kForRead); if (Acad::eOk != es) { AfxMessageBox(_T("获取实体失败!")); return sNull; } CString str; if (pEnt->isKindOf(AcDbText::desc())) { AcDbText *pText = NULL; pText = AcDbText::cast(pEnt); str = pText->textString(); pText->close(); } else if (pEnt->isKindOf(AcDbMText::desc())) { AcDbMText *pmText = NULL; pmText = AcDbMText::cast(pEnt); str = pmText->contents(); pmText->close(); } else { AfxMessageBox(_T("获取实体不是文本类型!")); pEnt->close(); return sNull; } pEnt->close(); return str; }