乐筑天下

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

关于模态对话框和非模态对话框的问题

[复制链接]

14

主题

43

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2006-2-5 20:19:00 | 显示全部楼层 |阅读模式
插入块的代码:
AcDbDatabase *pCurDb;
AcDbBlockTable *pBlkTable;
AcDbBlockTableRecord *pBlkTableRecord;
AcDbBlockReference *pInsrtObj;
AcDbObjectId blkId;
pCurDb = acdbHostApplicationServices()->workingDatabase();
pCurDb->getBlockTable(pBlkTable, AcDb::kForRead);
if(!pBlkTable->has(blkName))
{
  acutPrintf("\nBlock definition %s not found. ", blkName);
  pBlkTable->close();
  return;
}
pBlkTable->getAt(blkName, blkId);
//下面的这一行在模态对话框中能很好的执行,但是在非模态对话框中却使CAD出现严重错误。不知怎么回事。请各位能指点一下迷津谢谢。
pBlkTable->getAt(ACDB_MODEL_SPACE, pBlkTableRecord, AcDb::kForWrite);
pBlkTable->close();

pInsrtObj = new AcDbBlockReference(insPt, blkId);
pBlkTableRecord->appendAcDbEntity(blkId, pInsrtObj);
pBlkTableRecord->close();
pInsrtObj->close();
Modal对话框中 按纽单击事件 以上代码能通过编译、执行
Modeless对话框中 按纽单击事件 以上代码能通过编译,执行时出现错误。
为这个问题都忙活了一天了,不知怎么解决。请一定指点一下!谢谢。
回复

使用道具 举报

14

主题

43

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2006-2-5 20:26:00 | 显示全部楼层
自己在网上找的答案如下:由于E文太差,请各位老大说明一下。
In a modeless dialog you are in application scope and not document scope.
acedCommand only works in document scope. You can try this to see if it
works. It is how I switch to document scope when the user right clicks in
the window, so I do not know if it will work from the modeless dialog, but I
think it should.
AcApDocument* pDoc = acDocManager->curDocument();
Acad::ErrorStatus es = acDocManager->lockDocument(pDoc);
if(es == Acad::eOk)
{
acedCommand.......
}
回复

使用道具 举报

14

主题

43

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2006-2-5 21:13:00 | 显示全部楼层
成功了!!哭死,搞了两天这个问题。
总结如下:
窗口要这样创建:
xfhDlg* xD = NULL;
xD=new xfhDlg(acedGetAcadFrame());
xD->Create(DLG_M);
xD->ShowWindow(SW_SHOW);
xD->CenterWindow();
在出错的代码前加上以下:
//非模态对话框要用以下代码:
AcApDocument* pDoc= acDocManager->curDocument();
Acad::ErrorStatus es = acDocManager->lockDocument(pDoc);
if(es != Acad::eOk) return;

在结束处加上以下代码:
//非模态对话框要用以下代码:
acDocManager->unlockDocument(pDoc);
回复

使用道具 举报

7

主题

11

帖子

1

银币

初来乍到

Rank: 1

铜币
39
发表于 2008-10-30 15:43:00 | 显示全部楼层
以后多向老兄学习
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-6 04:14 , Processed in 0.149951 second(s), 60 queries .

© 2020-2025 乐筑天下

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