找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2618|回复: 3

[教学]:如何用ARX实现打开一个图形自动关闭ACAD启动后默认的空图形DRAWING1.DWG窗口

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-3-15 15:28:51 | 显示全部楼层 |阅读模式

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

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

×
问题:

当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并打开一个图形

  1. #include <acad15.h>
  2. #include <acad15_i.c>

  3. //
  4. // 要确保下面的命令用ACRX_CMD_SESSION 位注册

  5. void openDwg()
  6. {
  7.         CWinApp* pWinApp = acedGetAcadWinApp();
  8.         if(!pWinApp)
  9.                 return;
  10.         CComPtr<IDispatch> pDisp = pWinApp->GetIDispatch(TRUE);
  11.         if(!pDisp)
  12.                 return;

  13.         CComPtr<IAcadApplication> pComApp;
  14.         HRESULT hr = pDisp->QueryInterface(IID_IAcadApplication,
  15. (void**)&pComApp);
  16.         if(FAILED(hr))
  17.                 return;

  18.         CComPtr<IAcadDocument> pDoc;
  19.         hr = pComApp->get_ActiveDocument(&pDoc);
  20.         if(FAILED(hr))
  21.                 return;
  22.        
  23.         BSTR fName;
  24.         hr = pDoc->get_Name(&fName);

  25.         _bstr_t dwg1("Drawing1.dwg");
  26.         _bstr_t dwg2(fName);
  27.         if(SUCCEEDED(hr) && dwg1 == dwg2)
  28.         {
  29.                 _variant_t vb(VARIANT_FALSE);
  30.                 _variant_t vnam(dwg1);
  31.                 hr = pDoc->Close(vb, vnam);
  32.                 if(FAILED(hr))
  33.                 {
  34.                         acutPrintf("\关闭drawing1.dwg文件失败.");
  35.                         return;
  36.                 }
  37.         }

  38.         _bstr_t fileName("c:\\test.dwg");

  39.         CComPtr<IAcadDocuments> pDocs;
  40.         hr = pComApp->get_Documents(&pDocs);
  41.         if(FAILED(hr))
  42.                 return;

  43.         _variant_t b(VARIANT_FALSE);
  44.         CComPtr<IAcadDocument> pDoc1;
  45.         hr = pDocs->Open(fileName, b, &pDoc1);
  46.         if(FAILED(hr))
  47.                 acutPrintf("\打开DWG文件失败.");
  48. }

  49. //注意:在SDI环境下,代码要做下面的改变
  50. //
  51. void openDwg()
  52. {
  53.     CWinApp* pWinApp = acedGetAcadWinApp();
  54.     if(!pWinApp)
  55.           return;
  56.     CComPtr<IDispatch> pDisp = pWinApp->GetIDispatch(TRUE);
  57.     if(!pDisp)
  58.           return;

  59.     CComPtr<IAcadApplication> pComApp;
  60.     HRESULT hr = pDisp->QueryInterface(IID_IAcadApplication, (void**)&pComApp);
  61.     if(FAILED(hr))
  62.           return;

  63.     CComPtr<IAcadDocument> pDoc;
  64.     hr = pComApp->get_ActiveDocument(&pDoc);
  65.     if(FAILED(hr))
  66.           return;

  67.     _bstr_t fileName("c:\\test.dwg");
  68.     hr = pDoc->Open(fileName, &pDoc);
  69.     if(FAILED(hr))
  70.           acutPrintf("\打开DWG文件失败.");
  71. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-30 12:45:24 | 显示全部楼层
我就在用:AcApDocManager::appContextOpenDocument(), closeDocument() 中遇到了这个问题。

但是老大,按照你的资料头文件我都搞不定!包含什么头文件才能用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-30 13:04:05 | 显示全部楼层
这些都是编程高手们玩的东东!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-16 11:34:17 | 显示全部楼层
找不到get_ActiveDocument!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 19:31 , Processed in 0.308294 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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