ynmjtd 发表于 2020-6-20 11:17:00

多文档打开的疑问

一直到acad2014,acDocManager->executeInApplicationContext(OpenDoc, (void *)pData2),打开文件后都会挂起,直到重新切换到最先的图形。
但从acad2015 就不会停顿了,接着执行后面的代码。有没有什么办法在新版本上与原来一样?

ynmjtd 发表于 2020-6-20 11:19:00

void OpenDoc(void* pData)
{
AcApDocument* pDoc = acDocManager->curDocument();
Acad::ErrorStatus es;
if (acDocManager->isApplicationContext())
{
      es=acDocManager->appContextOpenDocument((ACHAR *)pData); //打开test7.dwg
      
      if(es!=Acad::eOk) {
                acutPrintf(L"\nError: %s\n",acadErrorStatusText(es));
                return;
      }
      
      
}
else
{
acutPrintf(L"\nERROR To Open Doc!\n");
}
}void open_test()
{
ACHAR pData2=L"test7.dwg";
acDocManager->executeInApplicationContext(OpenDoc, (void *)pData2);
//打开后,停在此句,test7.dwg 变为当前文档和活动文档
//只有drawing1 重新变为当前和活动文档,才会执行下面一句
AfxMessageBox(L"ok");
}
我有一个MDI程序,cad2008上运行良好,移植到cad2015上就不正常了,我简化成上面的代码。要的就是上面的效果。
即最先打开的图是drawing1, 运行程序打开另一张图test7.dwg,此时test7.dwg成为当前和活动文档,打开后就停留在test7.dwg文档上,并不会显示“ok”,只有重新切换到
drawing1(或者关闭test7.dwg),才会显示"ok",我的程序正是要达到这样的效果。
但移植到cad2015(objarx2015)后,程序的运行逻辑变了,打开test7.dwg后,无需切换到drawing1.dwg,就接着显示了“OK”,导致程序执行混乱
这是什么原因? 如何解决?
从acad2000一直到acad2014,acDocManager->executeInApplicationContext(OpenDoc, (void *)pData2),打开文件后都会挂起,直到重新切换到最先的图形才会继续后面的代码。
但从acad2015 就不会停顿了,接着执行后面的代码。有没有什么办法在新版本上与原来一样?

luowy 发表于 2020-7-2 22:01:00

获取当前活动文档,不要用curDocument,用这个函数会直接将一个文档设为当前文档。建议用mdiActiveDocument。
还有就是,使用那个executeInApplicationContext前,先将文档锁定,用完再解锁。避免其他文档操作函数切换活动文档的状态。
页: [1]
查看完整版本: 多文档打开的疑问