ObjectARX, AutoCAD. Среда программирования библиотеки C++



         

Использование COM, чтобы обратиться к AutoCAD ActiveX Автоматизация - часть 2


Удостоверитесь, чтобы использовать путь для AutoCAD, установленного на вашей системе:

#import "c:\\acad\\acad.tlb" no_implementation \

Raw_interfaces_only named_guids

6 Решают, который связывает с помощью интерфейса Вас, будет должен обратиться. Так как этот пример использует строку меню AutoCAD, это требует большинства объектов меню. Они объявлены в функции addMenuThroughCom следующим образом:

AutoCAD::IAcadApplication *pAcad;

AutoCAD::IAcadMenuBar *pMenuBar;

AutoCAD::IAcadMenuGroups *pMenuGroups;

AutoCAD::IAcadMenuGroup *pMenuGroup;

AutoCAD::IAcadPopupMenus *pPopUpMenus;

AutoCAD::IAcadPopupMenu *pPopUpMenu;

AutoCAD::IAcadPopupMenuItem *pPopUpMenuItem;

7 более прямой подход COM обращаться к интерфейсам Автоматизации использует QueryInterface. Следующий код возвращает IUNKNOWN для AutoCAD:

HRESULT hr = NOERROR;

CLSID clsid;

LPUNKNOWN pUnk = NULL;

LPDISPATCH pAcadDisp = NULL;

hr = ::CLSIDFromProgID(L"AutoCAD.Application", &clsid);

if (SUCCEEDED(hr))

{

if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK)

{

if (pUnk->QueryInterface(IID_IDispatch, (LPVOID*) &pAcadDisp) != S_OK)

return;

pUnk->Release();

}

}

8 Использования IUnknown, чтобы получить объект приложения AutoCAD. Также, удостоверитесь, что AutoCAD видим и получать объекты IACADMENUBAR И IACADMENUGROUPS.

Этому показывают в следующем коде:

if (SUCCEEDED(pAcadDisp->QueryInterface (AutoCAD::IID_IAcadApplication,(void**)&pAcad)))

{

pAcad->put_Visible(true);

}

else {

acutPrintf("\nQueryInterface trouble.");

return;

}

9 С приложением AutoCAD, получите строку меню и коллекции групп меню.

Определите, сколько меню текущие на строке меню:

pAcad->get_MenuBar(&pMenuBar);

pAcad->get_MenuGroups(&pMenuGroups);

pAcad->Release();

long numberOfMenus;

pMenuBar->get_Count(&numberOfMenus);

pMenuBar->Release();

10 Получают первое меню от коллекции групп меню. Это будет обычно ACAD, но могло быть кое-что еще. Тогда получите коллекцию всплывающих меню от первой группы меню:




Содержание  Назад  Вперед