´Ù. ÅÇ °ü¸®

ÆÄÀÏ ÀÔÃâ·ÂÇÔ¼öµéÀº ÆÄÀÏÀ» ¿­ ¶§, ´ÝÀ» ¶§, À̸§À» ¹Ù²Ü ¶§ ÅÇ °ü¸® ÇÔ¼öµéÀ» ÀûÀýÈ÷ È£ÃâÇÏ¿© ÆÄÀÏ°ú ÇÔ²² ÆÄÀÏÅǵµ °°ÀÌ °ü¸®ÇØ¾ß ÇÑ´Ù. ÆÄÀÏÅÇÀº °á±¹ ¿­¸° ÆÄÀÏÀÇ ÇöÀç »óŸ¦ º¸¿©ÁÖ´Â °ÍÀ̱⠶§¹®¿¡ ÆÄÀÏ°ú »ý¸íÀ» °°ÀÌ ÇÏ¸ç µû¶ó¼­ ÆÄÀÏÀ» °ü¸®ÇÏ´Â ¸ðµç Äڵ忡¼­ ÆÄÀÏÅǵµ °°ÀÌ °ü¸®ÇØ¾ß ÇÑ´Ù.

ÆÄÀÏÅÇÀ» Ãß°¡ÇÏ´Â ½ÃÁ¡Àº µÎ ±ºµ¥°¡ ÀÖ´Ù. ù ¹ø°´Â OpenFromFile ÇÔ¼ö¿¡¼­ ÆÄÀÏ¿­±â¿¡ ¼º°øÇßÀ» ¶§ÀÌ´Ù. ÆÄÀÏÀ» ¿­¾úÀ¸´Ï ÆÄÀÏÅÇ¿¡µµ ¾î¶² ÆÄÀÏÀÌ ¿­·È´ÂÁö Ç¥½ÃÇØ¾ß ÇÑ´Ù. ¹°·Ð ÆÄÀÏ¿­±â¿¡ ½ÇÆÐÇßÀ¸¸é Åǵµ Ãß°¡ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

 

BOOL OpenFromFile(TCHAR *Path,BOOL bReadOnly/*=FALSE*/,BOOL bBrowse/*=FALSE*/)

{

     HWND hChild;

     SInfo *pSi;

     BOOL bNew=TRUE;

     TCHAR Mes[512];

    int TabIdx;

 

     ....

     if (bNew) {

          hChild=New();

          pSi=(SInfo *)GetWindowLong(hChild,0);

    } else {

        TabIdx=FindFileTab(pSi->NowFile);

    }

 

     ....

 

    if (bNew) {

        AddFileTab(Path);

    } else {

        ChangeFileTab(TabIdx,Path);

    }

 

     return TRUE;

}

 

»õ âÀ» ¸¸µé¾úÀ» ¶§´Â AddFileTab ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÅÇÀ» Ãß°¡ÇÏ°í ±âÁ¸ÀÇ Ã¢¿¡ ÆÄÀÏÀ» ¿­±â¸¸ Çß´Ù¸é ChangeFileTab ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÅÇÀÇ ÅؽºÆ®¸¸ º¯°æÇÏ¸é µÈ´Ù. FindFileTab ÇÔ¼ö´Â ¿ÏÀü °æ·Î·Î ´ëÀÀµÇ´Â ÅÇÀ» ã±â ¶§¹®¿¡ ÆÄÀÏ À̸§ÀÌ ¹Ù²î±â Àü¿¡ ÅÇÀÇ ¹øÈ£¸¦ ¹Ì¸® ã¾Æ ³õ¾Æ¾ß ÇÑ´Ù.

ÆÄÀÏÅÇÀ» Ãß°¡ÇÏ´Â µÎ ¹ø° ½ÃÁ¡Àº »õ·Î¿î ¹®¼­Ã¢À» ¸¸µé¾úÀ» ¶§ÀÌ´Ù. ºñ·Ï ¡®À̸§¾øÀ½ n¡¯À̶ó´Â À̸§À» °¡ÁöÁö¸¸ ´ëÀÀµÇ´Â ¹®¼­Ã¢À» °¡Áö°í ÀÖÀ¸¹Ç·Î ÆÄÀÏÅÇÀ» ¸¸µé¾î¾ß ÇÑ´Ù. »õ ¹®¼­Ã¢À» »ý¼ºÇÏ°í ÆÄÀÏÅÇ¿¡ Ãß°¡ÇÏ´Â ´ÙÀ½ ÇÔ¼ö¸¦ »õ·Î Ãß°¡ÇÑ´Ù.

 

HWND NewChild()

{

     HWND hChild;

     SInfo *pSi;

 

     g_NewNo++;

     hChild=New();

     pSi=(SInfo *)GetWindowLong(hChild,0);

     AddFileTab(pSi->NowFile);

     return hChild;

}

 

ÀÌ ÇÔ¼ö´Â »õ ¹®¼­Ã¢À» »ý¼ºÇÏ°í ÀÌ Ã¢ÀÇ ÆíÁýÆÄÀÏ À̸§(À̸§¾øÀ½ n)À» Á¶»çÇÑ ÈÄ ÅÇ¿¡ Ãß°¡ÇÑ´Ù. New ÇÔ¼ö´Â ÀÌÁ¦ »õ·Î¿î À©µµ¿ì¸¦ ¸¸µå´Â ÇÔ¼ö·Î Àǹ̰¡ ¹Ù²î°Ô µÇ¸ç NewChild ÇÔ¼ö°¡ »õ ¹®¼­¸¦ ¸¸µå´Â ÇÔ¼ö°¡ µÈ´Ù. New ÇÔ¼ö¿¡ ÀÖ´Â g_NewNo++; ¹®ÀåÀº ÀÌÁ¦ »èÁ¦Çϵµ·Ï ÇÏÀÚ. ÀÌ º¯¼ö´Â »õ ¹®¼­ÀÇ ÀϷùøÈ£ÀÌÁö »õ À©µµ¿ìÀÇ ÀϷùøÈ£°¡ ¾Æ´Ï¹Ç·Î NewChild¿¡¼­¸¸ Áõ°¡½ÃÄÑ¾ß ÇÑ´Ù. New ÇÔ¼ö¸¦ È£ÃâÇÏ¿© »õ ¹®¼­¸¦ ¸¸µå´Â ÇÔ¼öµéÀº New ´ë½Å NewChild¸¦ È£ÃâÇϵµ·Ï ¼öÁ¤ÇÑ´Ù. ¸ðµÎ 4±ºµ¥°¡ ÀÖ´Ù. ¿ì¼± ÆÄÀÏ/»õ ÆÄÀÏ ¸í·ÉÀ¸·Î »õ ¹®¼­¸¦ ¸¸µé ¶§ÀÌ´Ù.

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     case IDM_FILE_NEW:

        NewChild();

          break;

 

»õ âÀ» ¸¸µå´Â °÷Àº OnTimer¿¡µµ ÀÖ´Ù. ½ÃÀÛÇÒ ¶§(StartAction) »õ ¹®¼­ ¿­±â ¿É¼ÇÀÌ ¼±ÅõǾî Àִٰųª, ¶Ç´Â ÆíÁýÇÏ´ø ¹®¼­ ¿­±â ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖ´õ¶óµµ ¸¶Áö¸· ÆíÁýÆÄÀÏÀÌ ¾øÀ» °æ¿ì¿¡´Â »õ ¹®¼­¸¦ ¿©´Âµ¥ À̶§µµ New ´ë½Å NewChild¸¦ È£ÃâÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.

 

void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

          switch (Option.StartAction)

          {

          case 0:

              break;

          case 1:

           NewChild();

              break;

          case 2:

              nEditing=SHRegReadInt(SHCU,KEY"Editing","Num",0);

              SHRegReadString(SHCU,KEY"Editing","Active","",Path,MAX_PATH);

              if (nEditing && lstrlen(Path) != 0) {

                   OpenFromFile(Path);

              } else {

               NewChild();

              }

              break;

 

¸¶Áö¸·À¸·Î »õ âÀ» ¸¸µå´Â ¾ÆÁÖ Æ¯¼öÇÑ °æ¿ì´Â °Ë»ö°á°úâ¿¡¼­ °Ë»ö°á°ú¸¦ »õ âÀ¸·Î º¸³¾ ¶§ÀÌ´Ù.

 

LRESULT CALLBACK DGOutputProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     ....

     case WM_COMMAND:

          ....

          case IDM_OUTPUT_SENDNEW:

           NewChild();

              SendOutputToWindow();

              break;

 

»õ ¹®¼­¸¦ ¸¸µå´Â ±â´É¿¡ ÆÄÀÏÅÇÀ» Ãß°¡ÇÏ´Â ±â´ÉÀÌ µé¾î°¡°Ô µÇ¾ú°í ±×·¡¼­ ÀÌ µÎ µ¿ÀÛÀ» °°ÀÌ ¼öÇàÇÏ´Â NewChild ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù. Áï NewChild=New+AddFileTabÀ̶ó°í ÇÒ ¼ö Àִµ¥ ±×·¸´Ù¸é ¿Ö New ÇÔ¼ö¸¦ Á÷Á¢ ¼öÁ¤ÇÏ¿© AddFileTab È£ÃâÀ» Æ÷ÇÔÇϵµ·Ï ÇÏÁö ¾Ê°í »õ·Î¿î ÇÔ¼ö¸¦ ¸¸µé¾úÀ»±î ÇÏ´Â ±Ã±ÝÇÔÀÌ »ý±æ °ÍÀÌ´Ù. New ÇÔ¼ö¸¦ Á÷Á¢ °íÄ¡¸é New ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °÷À» °íÄ¡Áö ¾Ê¾Æµµ µÇÁö ¾ÊÀ»±î?

ÀÌ·¸°Ô ÇØ¾ß ÇÏ´Â ÀÌÀ¯´Â ¿ø·¡ ÀÇ¹Ì ±×´ë·ÎÀÇ New¸¦ ÇÊ¿ä·Î ÇÏ´Â °÷µµ Àֱ⠶§¹®ÀÌ´Ù. Áï »õ ¹®¼­¸¦ ¸¸µå´Â °ÍÀÌ ¾Æ´Ï¶ó »õ ⸸ ¸¸µå´Â °æ¿ì°¡ ¾ÆÁ÷ ³²¾Æ Àֱ⠶§¹®¿¡ ÆÄÀÏÅÇ¿¡ Ãß°¡´Â ÇÏÁö ¾Ê°í »õ ⸸ ¸¸µå´Â ÇÔ¼ö°¡ ¿©ÀüÈ÷ ÇÊ¿äÇÏ¸ç ±× ¿ªÇÒÀ» New ÇÔ¼ö°¡ °è¼Ó ÇÏ°íÀÚ ÇÏ´Â °ÍÀÌ´Ù. OpenFromFile ÇÔ¼ö´Â ¹®¼­¸¦ ¿­±â Àü¿¡ »õ âÀ» ¸ÕÀú ¸¸µé°í OpenFileToChild¸¦ ¹Ù·Î È£ÃâÇϹǷΠ¿©±â¼­ ÇÊ¿äÇÑ ÇÔ¼ö´Â ºÐ¸íÈ÷ NewChild°¡ ¾Æ´Ï¶ó NewÀÌ´Ù.

¸¸¾à New¿¡ AddFileTab È£ÃâÀ» Æ÷ÇÔ½ÃŲ´Ù¸é OpenFromFile ÇÔ¼ö´Â °°Àº ÆÄÀÏÀ» ÅÇ¿¡ µÎ ¹ø µî·ÏÇÏ°Ô µÉ °ÍÀÌ´Ù. NewChild¸¦ »õ·Î ¸¸µå´Â ´ë½Å NewWithoutAddFileTab ÇÔ¼ö¸¦ »õ·Î ¸¸µå´Â °Íµµ ÇØ°áÃ¥ÀÌ µÉ ¼ö ÀÖ´Ù.

ÆÄÀÏÅÇÀ» »èÁ¦ÇÒ ½ÃÁ¡Àº ÆíÁýâÀÌ Æı«µÉ ¶§ ÇÑ ±ºµ¥»ÓÀÌ´Ù. ¹®¼­Ã¢ÀÌ WM_DESTROY ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ÆÄÀÏÅÇÀ» »èÁ¦ÇÏ¸é µÈ´Ù. ¹®¼­°¡ Æı«µÇ¸é ´ëÀÀµÇ´Â ÆÄÀÏÅǵµ °°ÀÌ »èÁ¦µÇ¾î¾ß Çϸç À̶§ ÅÇÀÇ lParam¿¡ ÇÒ´çµÇ¾î ÀÖ´ø ¸Þ¸ð¸®µµ ÇØÁ¦µÈ´Ù.

 

LRESULT CALLBACK DGChildProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

     case WM_DESTROY:

          pSi=(SInfo *)GetWindowLong(hWnd,0);

        DeleteFileTab(pSi->NowFile);

          delete pSi;

          g_ChildNum--;

          if (g_ChildNum==0) {

              SendMessage(g_hMDIClient,WM_MDISETMENU,(WPARAM)hMenu2,NULL);

              Mru.ChangeMenu(GetSubMenu(GetSubMenu(hMenu2,0),3));

              DrawMenuBar(g_hFrameWnd);

              if (Option.bShowStatus) {

                   SetStatusPart();

              }

          }

          return 0;

     }

     return(DefMDIChildProc(hWnd,iMessage,wParam,lParam));

}

 

ÆÄÀÏÅÇÀ» ¼öÁ¤ÇÒ °÷µµ ÇÑ ±ºµ¥»ÓÀÌ´Ù. SaveAs·Î ÆÄÀÏ À̸§À» ¹Ù²Ù¾î ÀúÀåÇÒ ¶§ ÅÇ ÅؽºÆ®µµ º¯°æµÈ ÆÄÀÏ À̸§À¸·Î ¹Ù²Û´Ù. ÆÄÀÏ À̸§ÀÌ ¹Ù²î±â Àü¿¡ ´ë»ó ÅÇÀ» ¸ÕÀú ã¾Æ ³õ¾Æ¾ß ÇÑ´Ù.

 

BOOL SaveAs(HWND hChild)

{

     OPENFILENAME OFN;

     TCHAR lpstrFile[MAX_PATH]="";

    int TabIdx;

 

     SInfo *pSi=(SInfo *)GetWindowLong(hChild,0);

    TabIdx=FindFileTab(pSi->NowFile);

 

     ....

 

     Mru.AddMRU(OFN.lpstrFile);

     lstrcpy(pSi->NowFile,OFN.lpstrFile);

     SetWindowText(hChild,pSi->NowFile);

 

    ChangeFileTab(TabIdx,pSi->NowFile);

     return TRUE;

}

 

ÆÄÀÏÅÇÀÇ Ãß°¡, »èÁ¦, ¼öÁ¤ ÀÛ¾÷Àº ÆÄÀÏÅÇÀÇ º¸ÀÓ/¼û±è(bShowFileTab) ¿É¼Ç°ú´Â »ó°ü¾øÀÌ Ç×»ó ÇØ¾ß ÇÑ´Ù. ¼³»ç ÆÄÀÏÅÇÀÌ ¼û°ÜÁ® ÀÖ´Â »óŶó ÇÏ´õ¶óµµ ¾ðÁ¦µçÁö »ç¿ëÀÚ°¡ º¸À̵µ·Ï ¿É¼ÇÀ» ¹Ù²Ü ¼ö Àֱ⠶§¹®¿¡ ÇöÀç ¿­¸° ÆÄÀÏ ¸ñ·ÏÀ» Ç×»ó Á¤È®ÇÏ°Ô À¯ÁöÇϵµ·Ï °ü¸®µÇ¾î¾ß ÇÑ´Ù.