// 間取りオブジェクトへ接続
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(TEXT("何もない"));
while(lRet){
ULONG uType = m_MadoriDoc->GetCurrentObjectType();
short nLayer = m_MadoriDoc->GetCurrentObjectLayer();
CString strMsg;
strMsg.Format(TEXT("[%X]type[%d]layer[%d]"), lRet, uType,nLayer);
AfxMessageBox(strMsg);
switch(uType){
case 19: // room
{
VARIANT vVertex;
vVertex.vt = VT_R8 | VT_ARRAY;
vVertex.parray = NULL;
unsigned short uRoomType;
BSTR szRoomName = NULL;
unsigned short bDispRoomName, bDispRoomSize;
double dFloorHeight, dFloorThick, dCeilingHeight, dHabakiHeight, dKoshiHeight, dMawaribuchiHeight, dKoshiMikiriHeight, dBalconyHeight;
unsigned short bHabaki, bMawaribuchi, bKoshikabe, bKoshiMikiri, bRoofFlag;
BYTE byHatchStyle;
unsigned long ocForeColor, ocBackColor;
unsigned short bBackTrans, uTatamiType;
BSTR szFontName = NULL;
double dFontSize;
BYTE byFontAttr;
double dFontAngle;
unsigned long ocFontColor;
m_MadoriDoc->GetRoom(&vVertex, &uRoomType, &szRoomName, &bDispRoomName, &bDispRoomSize, &dFloorHeight,
&dFloorThick, &dCeilingHeight, &dHabakiHeight, &dKoshiHeight, &dMawaribuchiHeight, &dKoshiMikiriHeight,
&dBalconyHeight, &bHabaki, &bMawaribuchi, &bKoshikabe, &bKoshiMikiri, &bRoofFlag, &byHatchStyle,
&ocForeColor, &ocBackColor, &bBackTrans, &uTatamiType, &szFontName, &dFontSize, &byFontAttr,
&dFontAngle, &ocFontColor);
CString strRoomName, strFontName;
AfxBSTR2CString(&strRoomName, szRoomName);
AfxBSTR2CString(&strFontName, szFontName);
strMsg.Format(TEXT("Room type[%u]name[%s]disp[%u][%u]floorHeight[%lf]")
TEXT("thick[%lf]Ceiling[%lf]habaki[%lf]koshi[%lf]")
TEXT("mawa[%lf]mikiri[%lf]bal[%lf]bHabaki[%u]bMawa[%u]bKosi[%u]bKosiM[%u]bRoof[%u]hatch[%d]")
TEXT("forCol[%x]backCol[%x]back[%u]tatami[%u]font[%s]size[%lf]attr[%x]angle[%lf]col[%x]"),
uRoomType, strRoomName, bDispRoomName, bDispRoomSize, dFloorHeight,
dFloorThick, dCeilingHeight, dHabakiHeight, dKoshiHeight,
dMawaribuchiHeight, dKoshiMikiriHeight,
dBalconyHeight, bHabaki, bMawaribuchi, bKoshikabe, bKoshiMikiri, bRoofFlag, byHatchStyle,
ocForeColor, ocBackColor, bBackTrans, uTatamiType, strFontName, dFontSize, byFontAttr,
dFontAngle, ocFontColor);
AfxMessageBox(strMsg);
if(szRoomName){
::SysFreeString(szRoomName);
}
if(szFontName){
::SysFreeString(szFontName);
}
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(TEXT("Vertex %u[%lf,%lf]"), u/2, pVar[u], pVar[u+1]);
AfxMessageBox(strMsg);
}
SafeArrayUnaccessData(vVertex.parray);
}
if(vVertex.parray) SafeArrayDestroy(vVertex.parray);
}
break;
}
lRet = m_MadoriDoc->GetNextObject();
}