描述:
怎样用activex automation 实现?最好有代码实现
解决方案1:
参数坐标要用数组在vc中
SAFEARRAY *pSA;
SAFEARRAYBOUND aDim[1];
aDim[0].lLbound= 0;
aDim[0].cElements= 3;
pSA= SafeArrayCreate(VT_R8,1,aDim);
//create a double type safearray
...
VARIANT vstart;
VariantInit(&vstart);
vstart.vt=VT_ARRAY|VT_R8;
vstart.parray = pSA;
Private Sub DrawBox_Click()
Dim p1(0 To 2) As Double
Dim p2(0 To 2) As Double
Dim p3(0 To 2) As Double
Dim p4(0 To 2) As Double
Dim lineObj As Object
`设定点座标
p1(0) = 10#
p1(1) = 10#
p1(2) = 0#
p2(0) = 100#
p2(1) = 10#
p2(2) = 0#
p3(0) = 100#
p3(1) = 100#
p3(2) = 0#
p4(0) = 10#
p4(1) = 100#
p4(2) = 0#
`划第一点到第二点
Set lineObj = acadApp.ActiveDocument.ModelSpace.AddLine(p1, p2)
`划第二点到第三点
Set lineObj = acadApp.ActiveDocument.ModelSpace.AddLine(p2, p3)
`划第三点到第四点
Set lineObj = acadApp.ActiveDocument.ModelSpace.AddLine(p3, p4)
`划第四点到第一点
Set lineObj = acadApp.ActiveDocument.ModelSpace.AddLine(p4, p1)
acadApp.Update
End Sub
参考:
#import "F:\ACAD2000\acad.tlb" no_namespace named_guids
....
IAcadApplicationPtr pAcadApp;
....
HRESULT h=NOERROR;
CLSID clsid;
::CLSIDFromProgID(L"AutoCAD.Application",&clsid);
h=pAcadApp.GetActiveObject(clsid);
if(SUCCEEDED(h))
{
::AfxMessageBox("GetObject ok");
}
else {
::AfxMessageBox("GetObject Fail!");
if(pAcadApp.CreateInstance(clsid)==S_OK)
::AfxMessageBox("CreateObject ok");
else
{
::AfxMessageBox("CreateObject Fail!");
::PostQuitMessage(0);
}
}
pAcadApp->WindowState=acMax;
pAcadApp->Visible=TRUE;
获取相关对象:
pAcadDoc=pAcadApp->ActiveDocument;//可能没有当前的文档,提示出错.
pAcadDoc->get_ModelSpace(&pAcadMSpace);
pAcadApp->WindowState=acMax;
pAcadApp->Visible=TRUE;
可参考帮助文件中对象图
.........