- UID
- 1
- 积分
- 15892
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-3
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
问题:
当AutoCAD 2000 第一次启动时候,将要创建一个空的文档DWGING1.DWG.使用ACAD的OPEN命令打开一个图形的时候,这个空文档窗口会自动的消失,如何用程序实现这个过程,比如:使用AcApDocManager::appContextOpenDocument()方法并在session context中注册它,Drawing1.dwg并不关闭,为什么?
回答:
如果你在使用AcApDocManager::appContextOpenDocument(), closeDocument() 中调用 AcApDocManager::closeDocument() 总是失败,是因为AutoCAD“认为”一些操作一直在命令行激活,结果就是即使你的appContextOpenDocument() 操作成功,也不会关闭文档。
答案是在你的ARX程序里面用ACAD的ActiveX Automation接口来解决。下面的代码在MDI环境下关闭缺省的DRAWING1.DWG并打开一个图形
- #include <acad15.h>
- #include <acad15_i.c>
- //
- // 要确保下面的命令用ACRX_CMD_SESSION 位注册
- void openDwg()
- {
- CWinApp* pWinApp = acedGetAcadWinApp();
- if(!pWinApp)
- return;
- CComPtr<IDispatch> pDisp = pWinApp->GetIDispatch(TRUE);
- if(!pDisp)
- return;
- CComPtr<IAcadApplication> pComApp;
- HRESULT hr = pDisp->QueryInterface(IID_IAcadApplication,
- (void**)&pComApp);
- if(FAILED(hr))
- return;
- CComPtr<IAcadDocument> pDoc;
- hr = pComApp->get_ActiveDocument(&pDoc);
- if(FAILED(hr))
- return;
-
- BSTR fName;
- hr = pDoc->get_Name(&fName);
- _bstr_t dwg1("Drawing1.dwg");
- _bstr_t dwg2(fName);
- if(SUCCEEDED(hr) && dwg1 == dwg2)
- {
- _variant_t vb(VARIANT_FALSE);
- _variant_t vnam(dwg1);
- hr = pDoc->Close(vb, vnam);
- if(FAILED(hr))
- {
- acutPrintf("\关闭drawing1.dwg文件失败.");
- return;
- }
- }
- _bstr_t fileName("c:\\test.dwg");
- CComPtr<IAcadDocuments> pDocs;
- hr = pComApp->get_Documents(&pDocs);
- if(FAILED(hr))
- return;
- _variant_t b(VARIANT_FALSE);
- CComPtr<IAcadDocument> pDoc1;
- hr = pDocs->Open(fileName, b, &pDoc1);
- if(FAILED(hr))
- acutPrintf("\打开DWG文件失败.");
- }
- //注意:在SDI环境下,代码要做下面的改变
- //
- void openDwg()
- {
- CWinApp* pWinApp = acedGetAcadWinApp();
- if(!pWinApp)
- return;
- CComPtr<IDispatch> pDisp = pWinApp->GetIDispatch(TRUE);
- if(!pDisp)
- return;
- CComPtr<IAcadApplication> pComApp;
- HRESULT hr = pDisp->QueryInterface(IID_IAcadApplication, (void**)&pComApp);
- if(FAILED(hr))
- return;
- CComPtr<IAcadDocument> pDoc;
- hr = pComApp->get_ActiveDocument(&pDoc);
- if(FAILED(hr))
- return;
- _bstr_t fileName("c:\\test.dwg");
- hr = pDoc->Open(fileName, &pDoc);
- if(FAILED(hr))
- acutPrintf("\打开DWG文件失败.");
- }
复制代码 |
|