找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 654|回复: 2

[求助]:找不到关于非模式对话框创建对象的贴子

[复制链接]
发表于 2002-4-29 00:45:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我想请教你一个问题:用objectarx2000 做一个应用程序(MFC),创建一个非模式对话框,有一个按钮,点击该按钮就在AutoCAD中创建一个直线。运行时出错。(如果改成模式对话框就不出错)请问该如何实现
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-4-29 02:12:09 | 显示全部楼层

原因及其解决办法

1、原因
在多文档状态下,
acdbHostApplicationServices()->workingDatabase()不是指一个文档,而是多个文档,如果此时对它进行写操作,就会使CAD死机

在单文档状态时
acdbHostApplicationServices()->workingDatabase()相当于R14时的curDwg(),

对于对话框而言,模式对话框在创建时,已经是属于某一个文档了,因此它不会有问题,  非模式对话框则不是属于任何一个文档的,如果此时直接往数据库中加东西就会死机。


2、解决方法
从根本上讲,在使用非模式对话框时要显式地管理文档的状态,当然,如果本来就不需要多文档,则将系统变量SDI设为1也能解决非模式对话框的问题。

下面这段代码是向当前文档写入一条直线,至于不是向当前文档而是向指定文档写入实体,则可依此变化之。

AcGePoint3d pt0(0,0,0),pt1(100,500,0);
        AcDbLine *pEnt=new AcDbLine(pt0,pt1);
        AcDbBlockTable *pBlockTable;

        acDocManager->lockDocument( acDocManager->curDocument(),                               AcAp::kWrite,
                               NULL,
                               NULL,true) ;
//将当前文档锁定,因为要写入实体了
        acDocManager->curDocument()->database()->getBlockTable(pBlockTable,AcDb::kForRead);
//打开当前文档的块表
        //acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);
        AcDbBlockTableRecord *pBlockTableRec;
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRec,AcDb::kForWrite);
        pBlockTable->close();
        AcDbObjectId eId;
                pBlockTableRec->appendAcDbEntity(eId,pEnt);
                pEnt->close();
        pBlockTableRec->close();
//运行完了要解锁
    acDocManager->unlockDocument( acDocManager->curDocument()) ;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-14 15:34:41 | 显示全部楼层
不好意思,这么深的帖子都给我挖出来,

那么,如果在文档锁定之后,执行下面这段语句怎么不可以:

acedCommand(RTSTR , "ZOOM" , RTSTR , "W" , RTPOINT , ZoomPt1 , RTPOINT , ZoomPt2 , 0)

难道不能执行外部命令?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 15:15 , Processed in 0.347886 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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