- 积分
- 3266
- 明经币
- 个
- 注册时间
- 2002-7-5
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2002-12-11 14:41:00
|
显示全部楼层
获取ACAD实例对象的方法
ActiveX开发,关键是获取AutoCAD的实例对象,在获取其实例对象之后,余下来的工作就是应用程序本身应该实现的功能。
使用Visual C++来开发ActiveX程序,与使用VB应该说是大同小异的。以下给你一个用QureyInterface()方法获取ACAD 2000的实例对象的函数,你可以将它添加到你的控件事件代码中去。
首先要保证你的工程引用以下的库文件:
acad15.lib,rxapi.lib,acedapi.lib,acrx15.lib,acutil15.lib并忽略msvcrtd.lib
以下是代码:
#include <rxregsvc.h>
#include <aced.h>
void GetAcadInstance(void)
{
AutoCAD::IAcadApplication *pCad;//首先声明一个ACAD应用程序实例指针
HRESULT hr=NOERROR; //C++结果句柄
CLSID slcid; //C++类ID
LPUNKNOWN pUnk=NULL;
LPDISPATCH pAcadDisplay=NULL;
hr=::CLSIDFromProgID("AutoCAD.Application",&clsid);
/*若已启动ACAD窗口实例,将ACAD类ID送到clsid指向的地址,若未启动ACAD,则系统将启动ACAD,并将ACAD类ID送到clsid指向的地址*/
if (SUCEEDED(hr))
{
if(::GetActiveObject(clsid,NULL,&pUnk)==S_OK)
{
if(pUnk->QueryInterface(IID_IDispatch,
(LPVOID*)& pAcadDisplay)!=S_OK)
return;
pUnk->release();
}
}
if(SUCEEDED(pAcadDisplay->QueryInterface(AutoCAD::
IID_IAcadApplication,(void**)& pCad)))
pCad->put_Visible(true); //显示ACAD窗口
else
{
acutPrinf("\nQueryInterface出错!");
return;
}
} |
|