// 間取りオブジェクトへ接続
CMadoriDoc * m_MadoriDoc = new CMadoriDoc();
CLSIDFromProgID (L"MyHomeDesignerMadori.MadoriDoc", &clsid);
GetActiveObject (clsid, NULL, &pUnk);
pUnk->QueryInterface (IID_IDispatch, (void**)(&pDisp));
m_MadoriDoc->AttachDispatch (pDisp);
// 列挙する
long lRet = m_MadoriDoc->GetTopObject();
if (lRet == 0) AfxMessageBox(_T("何もない"));
while (lRet) {
ULONG uType = m_MadoriDoc->GetCurrentObjectType();
short nLayer = m_MadoriDoc->GetCurrentObjectLayer();
CString strMsg;
strMsg.Format(_T("[%X]type[%d]layer[%d]"), lRet, uType, nLayer);
AfxMessageBox(strMsg);
switch (uType) {
case 51:
{
VARIANT vVertex;
vVertex.vt = VT_R8 | VT_ARRAY;
vVertex.parray = NULL;
INT nZoneLevel = 0;
BSTR szZoneName = NULL;
INT bDispZoneName = 0;
INT bDispZoneSize = 0;
DOUBLE dStringPosX = 0.0;
DOUBLE dStringPosY = 0.0;
DOUBLE dCapacitySeats;
BYTE byLineStyle;
BYTE byLineWidth;
OLE_COLOR ocLineColor;
BYTE byHatchStyle;
BYTE byHatchWidth;
OLE_COLOR ocForeColor;
OLE_COLOR ocBackColor;
BOOL bBackTrans;
BSTR szFontName = NULL;
DOUBLE dFontSize;
INT nFontAttr;
DOUBLE dFontAngle;
OLE_COLOR ocFontColor;
BOOL bRet = m_MadoriDoc->GetZone(&vVertex,
(long *)&nZoneLevel,
&szZoneName,
(long *)&bDispZoneName,
(long *)&bDispZoneSize,
&dStringPosX,
&dStringPosY,
&dCapacitySeats,
&byLineStyle,
&byLineWidth,
&ocLineColor,
&byHatchStyle,
&byHatchWidth,
&ocForeColor,
&ocBackColor,
(long *)&bBackTrans,
&szFontName,
&dFontSize,
(long *)&nFontAttr,
&dFontAngle,
&ocFontColor);
CString strMsg, strZoneName, strFontName;
AfxBSTR2CString(&strZoneName, szZoneName);
strMsg.Format(_T("Zone level[%d]name[%s]disp[%u][%u] StringPos[%lf, %lf] CapacitySeats[%lf]")
_T("Line style[%u]Width[%u]Color[%ld] Hatch style[%u] width[%u] color[%ld][%ld]")
_T("BackTrans[%u] Font name[%s]size[%u]attr[%d] angle[%lf] color[%ld] "),
nZoneLevel, szZoneName, bDispZoneName, bDispZoneSize, dStringPosX, dStringPosY,
dCapacitySeats, byLineStyle, byLineWidth, ocLineColor, byHatchStyle, byHatchWidth,
ocForeColor, ocBackColor, bBackTrans,szFontName, dFontSize, nFontAttr, dFontAngle,
ocFontColor);
AfxMessageBox(strMsg);
ULONG uVertex = 0;
if (vVertex.parray) {
uVertex = vVertex.parray->rgsabound[0].cElements;
}
if (uVertex > 0) {
double * pVar;
SafeArrayAccessData(vVertex.parray, (void**)&pVar);
for (ULONG u = 0; u < uVertex; u += 2) {
strMsg.Format(_T("Vertex %u[%lf,%lf]"), u / 2, pVar[u], pVar[u + 1]);
AfxMessageBox(strMsg);
}
SafeArrayUnaccessData(vVertex.parray);
}
if (vVertex.parray) SafeArrayDestroy(vVertex.parray);
}
break;
default:
break;
}
lRet = m_MadoriDoc->GetNextObject();
}