乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 36|回复: 2

多文档打开的疑问

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 2020-6-20 11:17:00 | 显示全部楼层 |阅读模式
一直到acad2014,acDocManager->executeInApplicationContext(OpenDoc, (void *)pData2),打开文件后都会挂起,直到重新切换到最先的图形。
但从acad2015 就不会停顿了,接着执行后面的代码。有没有什么办法在新版本上与原来一样?
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 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[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 就不会停顿了,接着执行后面的代码。有没有什么办法在新版本上与原来一样?
回复

使用道具 举报

2

主题

165

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2020-7-2 22:01:00 | 显示全部楼层
获取当前活动文档,不要用curDocument,用这个函数会直接将一个文档设为当前文档。建议用mdiActiveDocument。
还有就是,使用那个executeInApplicationContext前,先将文档锁定,用完再解锁。避免其他文档操作函数切换活动文档的状态。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 03:51 , Processed in 0.284812 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表