关于模态对话框和非模态对话框的问题
插入块的代码: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对话框中 按纽单击事件 以上代码能通过编译,执行时出现错误。
为这个问题都忙活了一天了,不知怎么解决。请一定指点一下!谢谢。
自己在网上找的答案如下:由于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.......
}
成功了!!哭死,搞了两天这个问题。
总结如下:
窗口要这样创建:
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);
以后多向老兄学习
页:
[1]