30/05/2013
Программное сохранение активного документа в C++/ARX приложении
Используем ActiveX интерфейс внутри ARX-приложения. Следующий пример кода показывает два подхода. Обратите внимание, что проект ARX-приложения должен поддерживать клиентские интерфейсы AutoCAD ActiveX. При помощи помощника (wizard) ARX это сделать очень просто.
Первый подход:
Код - C++: [Выделить]
- void saveDwg()
- {
- try
- {
- IAcadApplicationPtr pApp =
- acedGetAcadWinApp()->GetIDispatch(FALSE);
- IAcadDocumentPtr pDoc;
- pApp->get_ActiveDocument(&pDoc);
- pDoc->Save();
- }
- catch(_com_error& e)
- {
- acutPrintf(_T("\nОшибка COM: %s"),
- (ACHAR*)e.Description());
- }
- }
Второй подход:
Код - C++: [Выделить]
- #include <acadi_i.c>
- // минимум проверок на ошибки для простоты кода
- void saveDwg()
- {
- 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;
- hr = pDoc->Save();
- if(FAILED(hr))
- acutPrintf(_T("\nНе получилось сохранить dwg-файл."));
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=76.0
Опубликовано 30.05.2013
Отредактировано 08.06.2013 в 02:00:10
Отредактировано 08.06.2013 в 02:00:10