XML Exporter: ´ëÈ­ »óÀÚ

±âº»ÀûÀÎ ´ëÈ­ »óÀÚ°¡ Æ÷ÇÔ µÇ¾î ÀÖ¾ùÁö¸¸ »ç¿ëÇÏÁö ¾Ê¾Ò´Ù.
À̹ø Àå¿¡¼­ ´ëÈ­ »óÀÚ¿¡ ¹öÆ°À» Ãß°¡ÇÏ¿© "Export" ¹öÆ°À» ´©¸£¸é ÀͽºÆ÷Æ® Çϵµ·Ï Çغ»´Ù.

´ëÈ­ »óÀÚ¸¦ Ãß°¡ÇϱâÀü¿¡ INode À̸§À» XML·Î ÀúÀåÇÒ ¶§ ¹ö±×¸¦ ¼öÁ¤ÇÏ°í ³Ñ¾î°¡ÀÚ.
Element NameÀ» ÀûÀ» ¶§ ¶ç¿ö¾²±â¸¦ ÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ±ôºýÇØ ¹ö·È´Ù.

¿¹¸¦ µé¸é ±âÁ¸ ¹®Á¦°¡ ÀÖ´ø XMLÀº ´ÙÀ½°ú °°´Ù.

<?xml version="1.0" encoding="euc-kr" ?>
<Scene Root>
    <Bip01>
        <Bip01 Footsteps />
    </Bip01>
</Scene Root>

"Scene Root"¿Í °°ÀÌ ¿¤¸®¸ÕÆ® À̸§À» ¶ç¿ö¾²±â Çϸé XML¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
±×·¡¼­ ¿¤¸®¸ÕÆ® À̸§Àº "Node"·Î ÇÏ°í ¼Ó¼ºÀº "name", ¼Ó¼º °ªÀº INodeÀÇ À̸§À¸·Î »ç¿ëÇϴ°ɷΠ¼öÁ¤ ÇÏ¿´´Ù.

<?xml version="1.0" encoding="euc-kr" ?>
<Node name="Scene Root">
    <Node name="Bip01">
        <Node name="Bip01 Footsteps" />
    </Node>
</Node>

Export::CollectINode() ¹Ù²ï Çü½Ä¿¡ ¸Âµµ·Ï ¼öÁ¤ÇÏ¿³´Ù.

void Export::CollectINode( INode* pNode, XmlNode* pParentXML )

{

    if(!pNode)

        return;

 

    XmlNode* pXmlNode = CreateXmlNode( "Node" );

    pXmlNode->AddAttribute( "name", pNode->GetName() );

    if( m_pXmlRoot == NULL )

        pParentXML = m_pXmlRoot = pXmlNode;

    else

        pParentXML->AttachChild( pXmlNode );

 

    int iChild = pNode->NumberOfChildren();

    for(int i=0; i<iChild; ++i)

    {

        INode* pChild = pNode->GetChildNode(i);

 

        if(pChild)

            CollectINode(pChild, pXmlNode );

    }

}

´ëÈ­ »óÀÚ¿¡ ¹öÆ°À» Ãß°¡Çϴ°Ǡ¾ÆÁÖ ½±´Ù. ºñÁê¾ó ½ºÆ©µð¿À¿¡¼­ ¸®¼Ò½º ¿¡µðÅ͸¦ ¿­¾î ¹öÆ°À» Ãß°¡ÇÏ¸é µÈ´Ù.

maxProjectOptionsDlgProc¿¡ ´ëÈ­ »óÀÚ¸¦ ¸¸µé¶§, lParam·Î Export °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁØ´Ù.

IDC_EXPORT ¹öÆ°À» ´©¸£¸é, Export::SetExport()¸¦ ¼ÂÆÃÇÑÈÄ ´ëÈ­ »óÀÚ¸¦ ´Ý°í Export ÇÑ´Ù.

INT_PTR CALLBACK maxProjectOptionsDlgProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)

{

    static Export *imp = NULL;

 

    WPARAM wlParam = LOWORD(wParam);

    WPARAM whParam = HIWORD(wParam);

 

    switch(message)

    {

    case WM_INITDIALOG:

        imp = (Export *)lParam;

        CenterWindow(hWnd,GetParent(hWnd));

        return TRUE;

 

    case WM_CLOSE:

        EndDialog(hWnd, 0);

        return 1;

    case WM_COMMAND:

        {

            if( imp && IDC_EXPORT == wlParam)       

            {

                imp->SetExport( true );

                SendMessage(hWnd, WM_CLOSE, 0, 0);               

            }

        }

        return 1;

    }

    return 0;

}

ML Æ÷¸ËÀ¸·Î ³ëµå¸¦ ÀúÀåÇØ º¸ÀÚ.
TinyXML ¶óÀ̺귯¸® ÀÌ¿Ü¿¡ XmlNode.h, XmlNode.cpp, StringUtil.h, StringUtil.cpp¸¦ Ãß°¡ÇÑ´Ù.
XmlNode¸¦ ÀÌ¿ëÇؼ­ XMLÀ» ÀúÀåÇÑ´Ù.

¼Ò½º: maxProject_dlg.zip