明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 686|回复: 2

多文档打开的疑问

[复制链接]
发表于 2020-6-20 11:17 | 显示全部楼层 |阅读模式
一直到acad2014,acDocManager->executeInApplicationContext(OpenDoc, (void *)pData2),打开文件后都会挂起,直到重新切换到最先的图形。

但从acad2015 就不会停顿了,接着执行后面的代码。有没有什么办法在新版本上与原来一样?

 楼主| 发表于 2020-6-20 11:19 | 显示全部楼层
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[80]=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 就不会停顿了,接着执行后面的代码。有没有什么办法在新版本上与原来一样?
发表于 2020-7-2 22:01 | 显示全部楼层
获取当前活动文档,不要用curDocument,用这个函数会直接将一个文档设为当前文档。建议用mdiActiveDocument。
还有就是,使用那个executeInApplicationContext前,先将文档锁定,用完再解锁。避免其他文档操作函数切换活动文档的状态。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-18 03:26 , Processed in 0.223986 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表