cad新学生 发表于 2009-11-21 10:30:00

[求助]新建文档画图问题,各位指点一下程序错在哪?

AcDbDatabase* CCreateEnity::NewDocDatabase()
{
AcDbDatabase* pNewDb=NULL;
static ACHAR pData[] =L"acad.dwt";

acDocManager->executeInApplicationContext(CreateDoc,(void *)pData);
为什么执行这句后下面语句不执行,只有回到cad切换回原来的文档才响应而且运行到实体关闭(绿色字体)报错,貌似数据库没有切换,该怎么改呢?有什么书或资料,高手们指点一下,谢谢!
AcApDocument* npDoc=GetLastDoc();
acDocManager->activateDocument(npDoc);
pNewDb=npDoc->database();
if(!pNewDb) return NULL;
    acDocManager->setCurDocument(npDoc);
   /* acdbHostApplicationServices()->setWorkingDatabase(pNewDb);*/
/*pNewDb=acdbHostApplicationServices()->workingDatabase(); */
AcDbBlockTable *pBtbl;
pNewDb->getSymbolTable(pBtbl, AcDb::kForRead);
AcDbBlockTableRecord *pBtblRcd;
pBtbl->getAt(ACDB_MODEL_SPACE, pBtblRcd,
AcDb::kForWrite);
pBtbl->close();
AcDbCircle *pCir1 = new AcDbCircle(AcGePoint3d(1,1,1),
AcGeVector3d(0,0,1),
1.0),
*pCir2 = new AcDbCircle(AcGePoint3d(4,4,4),
AcGeVector3d(0,0,1),
2.0);
pBtblRcd->appendAcDbEntity(pCir1);
pCir1->close();
       
pBtblRcd->appendAcDbEntity(pCir2);
pCir2->close();
pBtblRcd->close();
delete pNewDb;
return pNewDb;
}
void CreateDoc( void *pData)
{
AcApDocument* pDoc = acDocManager->curDocument();
if (acDocManager->isApplicationContext())
{
acDocManager->appContextNewDocument((const ACHAR *)pData);
}
}

luowy 发表于 2009-11-24 14:02:00


1、你需要在creatDoc那里切换回你原来的文档,MDI文档机制让新建的文档变成了当前活动文档,arx代码在原文档的执行被中断了,这个不难理解,你在一个文档中画线,当切换文档后再回来,会发现画线的命令依然在等待相应。
2、至于你说的关闭圆那里报错,是因为你新建的文档处于锁定状态,你需要在setDocument那里打开。
3、以上完成了,还是会出错,这回到之前有人说的那个内存0x000005的问题了,这个我又去研究一下,发现如果将增加实体的代码去掉,函数是正常运行的。迷糊中,解决尚不能。
=====
问题已经解决,源码稍后公布!

cad新学生 发表于 2009-11-27 17:52:00

谢谢!等待。。。
页: [1]
查看完整版本: [求助]新建文档画图问题,各位指点一下程序错在哪?