¶ó. ÆÄÀÏ ¿­±â

ÆÄÀÏ ÀÔÃâ·ÂÇÔ¼ö ¼±¾ð

ApiEdit´Â ÅؽºÆ® ÀÔÃâ·ÂÀ» À§ÇÑ ¸â¹öÇÔ¼ö¸¸À» Á¦°øÇϸç Á÷Á¢ ÆÄÀÏÀ» ´Ù·çÁö´Â ¾Ê´Â´Ù. ÆÄÀÏÀ» °ü¸®ÇÏ´Â ÀÏÀº È£½ºÆ® ÇÁ·Î±×·¥ÀÌ ÇÒ ÀÏÀ̹ǷΠDangeun¿¡ ÆÄÀÏ ÀÔÃâ·Â Äڵ带 ÀÛ¼ºÇغ¸ÀÚ. ÆÄÀÏ ÀÔÃâ·ÂÀ» À§ÇØ ´ÙÀ½ ÇÔ¼ö¸¦ Dangeun.cpp¿¡ Ãß°¡ÇÑ´Ù. ÀÏ´Ü ¿øÇüºÎÅÍ ¼±¾ðÇϵµ·Ï ÇÏÀÚ.

 

void Open();

BOOL OpenFromFile(TCHAR *Path);

BOOL OpenFileToChild(HWND hChild, TCHAR *Path);

BOOL Save(HWND hChild);

BOOL SaveAs(HWND hChild);

BOOL SaveToFile(HWND hChild,TCHAR *Path);

int ConfirmSave(HWND hChild);

HWND FindChildWithFile(TCHAR *path);

BOOL TestNeedActive(WORD ID);

 

New ÇÔ¼ö´Â ÀÌ¹Ì ÀÛ¼ºÇßÀ¸¹Ç·Î New ÇÔ¼ö ´ÙÀ½¿¡ ¿øÇüÀ» ¼±¾ðÇÏ¸é µÈ´Ù. OnCommand ¿¡¼­´Â °¢ ¸Þ´ºÇ׸ñÀÌ ¼±ÅÃµÉ ¶§ ´ëÀÀµÇ´Â ÇÔ¼ö¸¦ È£ÃâÇÏ¿´´Ù.

 

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

{

    HWND hActive;

 

    hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);

     switch(LOWORD(wParam)) {

     case IDM_FILE_NEW:

          New();

          break;

    case IDM_FILE_OPEN:

        Open();

        break;

    case IDM_FILE_SAVE:

        Save(hActive);

        break;

    case IDM_FILE_SAVEAS:

        SaveAs(hActive);

        break;

    case IDM_FILE_CLOSE:

        SendMessage(hActive,WM_CLOSE,0,0);

        break;

     ....

 

ÀúÀåÀÇ °æ¿ì È°¼ºÃ¢À» ´ë»óÀ¸·Î ÇϹǷΠWM_MDIGETACTIVE ¸Þ½ÃÁö·Î È°¼ºÃ¢ÀÇ ÇÚµéÀ» hActive¿¡ Á¶»çÇÏ¿© ÀÌ ÇÚµéÀ» Save, SaveAs ÇÔ¼öÀÇ Àμö·Î Àü´ÞÇÏ¿´´Ù.

À¯Æ¿¸®Æ¼ ÇÔ¼ö

±×·³ Dangeun.cpp¿¡ ÆÄÀÏ ÀÔÃâ·ÂÇÔ¼öµéÀÇ º»Ã¼¸¦ ÀÛ¼ºÇغ¸ÀÚ. ¸ÕÀú »ó´ëÀûÀ¸·Î °£´ÜÇÑ µÎ °³ÀÇ À¯Æ¿¸®Æ¼ ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.

 

int ConfirmSave(HWND hChild)

{

     int result=IDNO;

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

     TCHAR Mes[MAX_PATH+64];

 

     if (pSi->Ae.GetModified()) {

          wsprintf(Mes,"%s ÆÄÀÏÀÌ º¯°æµÇ¾ú½À´Ï´Ù. ÀúÀåÇϽðڽÀ´Ï±î?",pSi->NowFile);

          result=MessageBox(g_hFrameWnd,Mes,"¾Ë¸²",MB_YESNOCANCEL);

          if (result == IDCANCEL) {

              return IDCANCEL;

          }

          if (result == IDYES) {

              if (Save(hChild) == FALSE)

                   return IDCANCEL;

              else

                   return IDYES;

          }

     }

     return result;

}

 

HWND FindChildWithFile(TCHAR *path)

{

     HWND hChild;

     SInfo *pSi;

 

     hChild=GetWindow(g_hMDIClient,GW_CHILD);

     while (hChild) {

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

          if (lstrcmp(pSi->NowFile,path)==0) {

              return hChild;

          }

          hChild=GetWindow(hChild,GW_HWNDNEXT);

     }

     return NULL;

}

 

ConfirmSave ÇÔ¼ö´Â hChildâÀÇ ÆÄÀÏÀÌ ÀúÀåµÇ¾ú´ÂÁö¸¦ Á¶»çÇÏ¸ç ¸¸¾à ÀúÀåµÇÁö ¾Ê¾Ò´Ù¸é »ç¿ëÀÚ¿¡°Ô Áú¹®À» ÇÏ°í ÀúÀåÇϵµ·Ï ÇÑ´Ù. ÆíÁýâÀ» ´Ý°Å³ª ¾Æ´Ï¸é ÇÁ·Î±×·¥À» Á¾·áÇÒ ¶§ ÀÌ ÇÔ¼ö°¡ È£ÃâµÇ¾î ¹Ìº¸°ü ¹®¼­°¡ ÀÖ´ÂÁö È®ÀÎÇÏ°í ÀúÀåÇÒ ±âȸ¸¦ Á¦°øÇÏ°Ô µÈ´Ù. ÆÄÀÏÀÌ º¯°æµÇÁö ¾Ê¾ÒÀ¸¸é ÀÌ¹Ì ÀúÀåÀÌ ¿Ï·áµÈ °ÍÀ̹ǷΠ¾Æ¹« Àϵµ ÇÏÁö ¾ÊÀ¸¸ç º¯°æµÇ¾ú´Ù¸é ´ÙÀ½ ¸Þ½ÃÁö¹Ú½º¸¦ ÅëÇØ ÀúÀåÇÒ °ÍÀÎÁö Áú¹®À» ÇÑ´Ù.

ÀÌ Áú¹®¿¡ ´ëÇØ »ç¿ëÀÚ´Â ¼¼ °¡Áö ¼±ÅÃÀ» ÇÒ ¼ö Àִµ¥ ¾Æ´Ï¿À¸¦ ¼±ÅÃÇϸé IDNO, Ãë¼Ò¸¦ ¼±ÅÃÇϸé IDCANCELÀ» ¸®ÅÏÇÑ´Ù. IDYES¸¦ ¼±ÅÃÇßÀ» ¶§ÀÇ Ã³¸®´Â Á¶±Ý º¹ÀâÇѵ¥ ÀÏ´Ü Save¸¦ È£ÃâÇÏ¿© ¹®¼­¸¦ ÀúÀåÇϵµ·Ï ÇÑ´Ù. Save ÇÔ¼ö ³»¿¡¼­ ÀúÀåÀÌ ¿Ï·áµÇ¸é IDYES¸¦ ¸®ÅÏÇÏ°í ½ÇÆÐÇϸé IDCANCELÀ» ¸®ÅÏÇϴµ¥ À̶§ ½ÇÆÐÀÇ ¿øÀÎÀº ¿©·¯ °¡Áö°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ÆÄÀϸíÀ» ¹¯´Â Áú¹®¿¡ Ãë¼Ò¸¦ ¼±ÅÃÇÒ ¼öµµ ÀÖ°í ÀÌ¹Ì Á¸ÀçÇÏ´Â ÆÄÀÏÀ» µ¤¾î ¾²Áö ¾Ê°Ú´Ù°í ´äº¯À» ÇßÀ» ¼öµµ ÀÖ°í ¾Æ´Ï¸é µð½ºÅ© ¿ë·® ºÎÁ·À̳ª ¾×¼¼½º °ÅºÎ·Î ÀúÀå¿¡ ½ÇÆÐÇÒ ¼öµµ ÀÖ´Ù.

ÀÌ ÇÔ¼öÀÇ ¸®ÅÏ°ªÀº ¼¼ °¡ÁöÀÌÁö¸¸ È£ÃâÃøÀÇ ÀÔÀå¿¡¼­ º¸¸é IDNO¿Í IDYES´Â µ¿ÀÏÇÑ ¸®ÅÏ°ªÀ̸ç IDCANCELÀ» ¸®ÅÏÇߴ°¡ ¾Æ´Ñ°¡¸¸ °ü½ÉÀ» °¡Áø´Ù. ÀÌ ÇÔ¼ö´Â À̸§ ±×´ë·Î ÀúÀå(Save)ÇÒ °ÍÀÎÁö ¾Æ´ÑÁö¸¦ È®½ÇÈ÷(Confirm) ó¸®Çϵµ·Ï ÇÏ´Â µ¿ÀÛÀ» Çϴµ¥ ¡®¿¹¡¯¸¦ ´­·¯ ÀúÀåÀ» Çß°Ç ¡®¾Æ´Ï¿À¡¯¸¦ ´­·¯ ÆíÁý ³»¿ëÀ» ¹ö·È°Ç ÀÌ µÎ ¼±Åÿ¡ ´ëÇÑ Ã³¸®´Â ÀÌ¹Ì ÀÌ ÇÔ¼ö ³»¿¡¼­ °áÁ¤ÀÌ ³­ °ÍÀÌ´Ù. È£ÃâÃø¿¡¼­´Â ¿ÀÁ÷ »ç¿ëÀÚ°¡ ¡®Ãë¼Ò¡¯¸¦ ¼±ÅÃÇߴ°¡ ¾Æ´Ñ°¡¸¦ º¸°í âÀ» ´ÝÀ» °ÍÀÎÁö, ÇÁ·Î±×·¥À» ¹«»çÈ÷ Á¾·áÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÒ »ÓÀÌ´Ù.

FindChildWithFile ÇÔ¼ö´Â ÀÌ¹Ì ÀÌ ¹®¼­°¡ ¿­·Á ÀÖ´ÂÁö Á¶»çÇÏ°í, ¿­·Á ÀÖ´Ù¸é ÀÌ ¹®¼­¸¦ ÆíÁýÇÏ°í ÀÖ´Â Â÷ÀϵåÀÇ ÇÚµéÀ» ±¸ÇÑ´Ù. MDI Ŭ¶óÀ̾ðÆ®ÀÇ ¸ðµç Â÷Àϵ带 ¼øȸÇϸ鼭 ÇöÀç ÆíÁýÇÏ°í ÀÖ´Â ÆÄÀÏÀÌ Àμö·Î Àü´ÞµÈ path ÆÄÀÏÀÎÁö¸¦ Á¶»çÇÏ¿´´Ù. °°Àº À̸§À» °¡Áø âÀÌ ¹ß°ßµÇ¸é ÀÌ Ã¢ÀÇ ÇÚµéÀ» ¸®ÅÏÇÏ°í ¸ðµç Â÷Àϵ带 ¼øȸÇÑ °á°ú path ÆÄÀÏÀ» ÆíÁýÇÏ°í Àִ âÀÌ ¾ø´Ù¸é NULLÀ» ¸®ÅÏÇÑ´Ù.

ÆÄÀÏÀ» ¿©´Â ÇÔ¼ö´Â ¸ÕÀú ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÀÌ¹Ì ¿­·Á ÀÖ´Â ÆÄÀÏÀÎ °æ¿ì »õ·Î À©µµ¿ì¸¦ ¸¸µéÁö ¾Ê°í ÇØ´ç À©µµ¿ì¸¦ È°¼ºÈ­½ÃÄÑ Áֱ⸸ ÇÏ¸é µÈ´Ù. ¸¸¾à ÀÌ °Ë»ç¸¦ ÇÏÁö ¾Ê°í ¹«Á¶°Ç ÆÄÀÏÀ» ¿­¾î ¹ö¸°´Ù¸é °°Àº ÆÄÀÏÀ» µÎ ¹ø, ¼¼ ¹ø ¿­ ¼öµµ ÀÖÀ¸¸ç ÀÌ´Â ÀáÀçÀûÀ¸·Î ÆíÁý ³»¿ëÀ» µ¤¾î¾µ À§ÇèÀ» À¯¹ßÇÏ°Ô µÈ´Ù.

ÆÄÀÏ Àбâ ÇÔ¼ö

´ÙÀ½Àº ÆÄÀÏ Àбâ ÇÔ¼öµéÀÌ´Ù. Dangeun.cppÀÇ ¾Æ·¡ÂÊ¿¡ Äڵ带 ÀÛ¼ºÇÏÀÚ.

 

void Open()

{

     OPENFILENAME OFN;

     TCHAR *lpstrFile;

     TCHAR Dir[MAX_PATH];

     TCHAR Path[MAX_PATH];

     TCHAR *p;

 

     memset(&OFN, 0, sizeof(OPENFILENAME));

     OFN.lStructSize = sizeof(OPENFILENAME);

     OFN.hwndOwner=g_hFrameWnd;

     OFN.lpstrFilter="¸ðµç ÆÄÀÏ(*.*)\0*.*\0ÅؽºÆ® ÆÄÀÏ\0*.txt\0´ç±Ù ÇÁ·ÎÁ§Æ®(*.dgp)\0*.dgp*\0";

     lpstrFile=(TCHAR *)malloc(100000);

     lpstrFile[0]=0;

     OFN.lpstrFile=lpstrFile;

     OFN.nMaxFile=100000;

     OFN.Flags=OFN_EXPLORER | OFN_ALLOWMULTISELECT;

 

     if (GetOpenFileName(&OFN)) {

          p=lpstrFile;

          lstrcpy(Dir,p);

          p=p+lstrlen(Dir)+1;

          if (*p==0) {

              OpenFromFile(Dir);

          } else {

              for (;*p;) {

                   wsprintf(Path,"%s\\%s",Dir,p);

                   p=p+lstrlen(p)+1;

                   OpenFromFile(Path);

              }

          }

     } else {

          if (CommDlgExtendedError()==FNERR_BUFFERTOOSMALL) {

              MessageBox(g_hFrameWnd,"ÇÑ ¹ø¿¡ ÆÄÀÏÀ» ³Ê¹« ¸¹ÀÌ ¼±ÅÃÇϼ̽À´Ï´Ù.",

                   "¾Ë¸²",MB_OK);

          }

     }

     free(lpstrFile);

}

 

BOOL OpenFromFile(TCHAR *Path)

{

     HWND hChild;

     SInfo *pSi;

     BOOL bNew=TRUE;

     TCHAR Mes[512];

 

     hChild=FindChildWithFile(Path);

     if (hChild) {

          SendMessage(g_hMDIClient,WM_MDIACTIVATE,(WPARAM)hChild,0);

          return TRUE;

     }

 

     if (g_ChildNum==1) {

          bNew=FALSE;

          hChild=GetWindow(g_hMDIClient,GW_CHILD);

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

          if (pSi->Ae.GetModified() || strncmp(pSi->NowFile,"À̸§¾øÀ½",8)) {

              bNew=TRUE;

          }

     }

    

     if (bNew) {

          hChild=New();

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

     }

 

     if (OpenFileToChild(hChild,Path)==FALSE) {

          if (bNew) {

              SendMessage(g_hMDIClient,WM_MDIDESTROY,(WPARAM)hChild,0);

          }

          wsprintf(Mes,"%s ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù. "

              "´Ù¸¥ ÇÁ·Î±×·¥ÀÌ »ç¿ëÁßÀÎÁö È®ÀÎÇϽʽÿÀ.",Path);

          MessageBox(g_hFrameWnd, Mes,"¾Ë¸²",MB_OK);

          return FALSE;

     }

     return TRUE;

}

 

BOOL OpenFileToChild(HWND hChild, TCHAR *Path)

{

     SInfo *pSi;

     HANDLE hFile;

     DWORD dwRead,dwSize;

     TCHAR *TextBuf;

 

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

 

     hFile=CreateFile(Path,GENERIC_READ,0,NULL,

          OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

     if (hFile==INVALID_HANDLE_VALUE) {

          return FALSE;

     }

 

     pSi->Ae.InitDoc();

     dwSize=GetFileSize(hFile,NULL);

     if (dwSize > 30*1048576) {

          if (MessageBox(g_hFrameWnd, "ÀÌ ÆÄÀÏÀÇ Å©±â´Â 30M°¡ ³Ñ½À´Ï´Ù. Á¤¸»·Î ¿©½Ã°Ú½À´Ï±î?",

              "Áú¹®",MB_YESNO)==IDNO) {

              CloseHandle(hFile);

              return FALSE;

          }

     }

     TextBuf=(TCHAR *)malloc(dwSize+1);

     ReadFile(hFile,TextBuf,dwSize,&dwRead,NULL);

     TextBuf[dwRead]=0;

     pSi->Ae.SetText(TextBuf);

     CloseHandle(hFile);

     free(TextBuf);

     pSi->Ae.SetModified(FALSE);

     lstrcpy(pSi->NowFile,Path);

     SetWindowText(hChild,Path);

 

     return TRUE;

}

 

Open ÇÔ¼ö´Â IDM_FILE_OPEN ¸Þ´ºÇ׸ñ°ú ÀÏ´ëÀÏ·Î ´ëÀÀµÇ´Â ¸Þ´ºÇ׸ñ ó¸® ÇÔ¼ö¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ¸Þ´º°¡ ¼±ÅÃµÈ ÈÄÀÇ ¸ðµç 󸮴 ÀÌ ÇÔ¼ö°¡ ´ã´çÇÏ¸ç ¸®ÅÏ°ªÀ» ³Ñ°ÜÁÙ ÇÊ¿ä´Â ¾øÀ¸¹Ç·Î voidÇüÀÌ´Ù. ÆÄÀÏ¿­±â ´ëÈ­»óÀÚ¸¦ º¸¿©ÁÖ°í »ç¿ëÀÚ°¡ ÀÐÀ» ÆÄÀÏÀ» ¼±ÅÃÇÏ¸é ±× ÆÄÀϸíÀ» OpenFromFile ÇÔ¼ö·Î Àü´ÞÇÑ´Ù. ÆÄÀÏÀ» ¼±ÅÃÇÏÁö ¾Ê°í Ãë¼ÒÇßÀ¸¸é ¾Æ¹« Àϵµ ÇÒ ÇÊ¿ä°¡ ¾øÀ¸¸ç ±×³É ¸®ÅÏÇÏ¸é µÈ´Ù. »ç¿ëÀڷκÎÅÍ ÆÄÀϸíÀ» ÀԷ¹ްí OpenFromFile ÇÔ¼ö¸¦ È£ÃâÇϸç ÀÌ ÇÔ¼öÀÇ Ã³¸® °á°ú¸¦ Á¡°ËÇÑ ÈÄ ¿¡·¯ ¸Þ½ÃÁö¸¦ º¸¿©ÁÖ´Â °ÍÀÌ Open ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀÇ ÀüºÎÀÌ´Ù.

º¹¼ö °³ÀÇ ÆÄÀÏÀ» ¼±ÅÃÇÏ´Â ¿É¼ÇÀ» Àû¿ëÇ߱⠶§¹®¿¡ ÆÄÀϸíÀ» ÃßÃâÇÏ´Â ºÎºÐÀÌ Á¶±Ý º¹ÀâÇغ¸ÀÏ ¼öµµ Àִµ¥ API Á¤º¹ 13-2-¸¶ Ç׿¡ º¹¼ö °³ÀÇ ÆÄÀÏ ¼±Åÿ¡ °üÇØ ÀÚ¼¼ÇÏ°Ô ¼³¸íµÇ¾î ÀÖÀ¸¹Ç·Î ÂüÁ¶Çϱ⠹ٶõ´Ù.

OpenFromFile ÇÔ¼ö´Â Àμö·Î Àü´ÞµÈ Path ÆÄÀÏÀ» ¿©´Âµ¥ µÎ °¡Áö Áß¿äÇÑ Ã³¸®¸¦ ÇÏ°í ÀÖ´Ù. ù ¹ø°´Â ÀÌ¹Ì ¿­¸° ÆÄÀÏÀΰ¡ ¾Æ´Ñ°¡¸¦ Á¡°ËÇغ¸°í ÆíÁýÁßÀÎ ÆÄÀÏÀ̸é ÇØ´ç Â÷Àϵ带 È°¼ºÈ­½ÃÅ°±â¸¸ ÇÑ´Ù. ÇÔ¼ö ¼±µÎ¿¡¼­ FindChildWithFileÀ» ºÒ·¯ º¸°í ÀÌ ÇÔ¼ö°¡ NULLÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇϸé ÀÌ ÆÄÀÏÀº ÀÌ¹Ì ¿­·Á ÀÖ´Â °ÍÀ̹ǷΠWM_MDIACTIVATE ¸Þ½ÃÁö¸¦ º¸³» ÀÌ Ã¢À» È°¼ºÈ­½ÃŲ´Ù.

±âº»Ã¢ ó¸®

µÎ ¹ø° Áß¿äÇÑ Ã³¸®´Â ±âº»À¸·Î ¸¸µé¾îÁØ ºó À©µµ¿ì¸¦ ¿ì¾ÆÇÏ°Ô Ã³¸®ÇÏ´Â °ÍÀÌ´Ù. DangeunÀº MDI ÇÁ·Î±×·¥À̹ǷΠ»õ·Î ÆÄÀÏÀ» ¿¬´Ù°í Çؼ­ ÆíÁýÇÏ´ø ÆÄÀÏÀ» ´ÝÀ» ÇÊ¿ä°¡ ¾øÀ¸¸ç »õ·Î Â÷Àϵå À©µµ¿ì¸¦ Çϳª ´õ ¸¸µé±â¸¸ ÇÏ¸é µÈ´Ù. ¸Þ¸ðÀå °°Àº SDI ÇÁ·Î±×·¥Àº »õ·Î ÆÄÀÏÀ» ¿­·Á¸é ¸ÕÀú ÆíÁýÇÏ´ø ÆÄÀÏÀ» ´Ý¾Æ¾ß ÇÏÁö¸¸ MDI ÇÁ·Î±×·¥Àº ÇÊ¿äÇÑ ¸¸Å­ À©µµ¿ì¸¦ ¸¸µé ¼ö ÀÖÀ¸¹Ç·Î À©µµ¿ì¸¦ ¸¸µé°í ÆÄÀÏÀ» Àоî¿À¸é µÈ´Ù. ÇÏÁö¸¸ ¿¹¿Ü°¡ Çϳª Àִµ¥ ÇÁ·Î±×·¥ÀÌ ½ÃÀ۵Ǹ鼭 ±âº»ÀûÀ¸·Î ¸¸µé¾îÁØ À©µµ¿ìÀÎ °æ¿ì´Â »õ·Î Â÷Àϵ带 ¸¸µéÁö ¾Ê°í ÀÌ À©µµ¿ì¿¡ ÆÄÀÏÀ» ¿¬´Ù.

DangeunÀº ½ÃÀÛ Á÷ÈÄ¿¡ ¡®À̸§¾øÀ½1¡¯À̶ó´Â ±âº» À©µµ¿ì¸¦ »ý¼ºÇϴµ¥ ÀÌ´Â ¾îµð±îÁö³ª »ç¿ëÀÚÀÇ ÆíÀÇ¿Í Å×½ºÆ® ¸ñÀûÀ» À§ÇØ ¹Ì¸® ¸¸µé¾î ³õÀº °ÍÀÌÁö »ç¿ëÀÚ°¡ ¸í½ÃÀûÀ¸·Î ¿¬ °ÍÀÌ ¾Æ´Ï¹Ç·Î ´Ù¸¥ ÆÄÀÏÀÌ ¿­¸®¸é ±»ÀÌ ÀÌ À©µµ¿ì¸¦ À¯ÁöÇÒ ÇÊ¿ä°¡ ¾ø´Ù. »ç¿ëÀÚ°¡ ±âº» À©µµ¿ì¸¦ ÀüÇô ÆíÁýÇÏÁö ¾ÊÀº »óÅ¿¡¼­ ´Ù¸¥ ÆÄÀÏÀ» Àоú´Ù¸é ºó Â÷Àϵå´Â »ç¶óÁ®¾ß ÇÑ´Ù.

´Ü, »ç¿ëÀÚ°¡ ºó À©µµ¿ì¿¡ ¹«¾ùÀΰ¡ ÀÔ·ÂÀ» Ç߰ųª ÀúÀåÀ» Çß´Ù¸é À̶§´Â À©µµ¿ì¸¦ À¯ÁöÇØ¾ß ÇÑ´Ù. ¿¹Á¦¿¡¼­´Â ÇöÀç ¿­¸° Â÷Àϵ尡 Çϳª»ÓÀÌ°í ÀÌ Â÷Àϵ尡 ÆíÁýµÇÁö ¾Ê¾ÒÀ¸¸ç ÆÄÀϸíÀÌ ¿©ÀüÈ÷ ¡®À̸§¾øÀ½¡¯À¸·Î µÇ¾î ÀÖÀ» ¶§¸¸ ÀÌ À©µµ¿ì¿¡ ÆÄÀÏÀ» Àоî¿Â´Ù. ±× ¿ÜÀÇ °æ¿ì´Â Ç×»ó New ÇÔ¼ö¸¦ È£ÃâÇÏ¿© »õ·Î¿î À©µµ¿ì¸¦ ¸¸µéµµ·Ï ÇÏ¿´´Ù.

¸¸¾à ÀÌ »óȲÀÌ Àß ÀÌÇØ°¡ µÇÁö ¾Ê´Â´Ù¸é ¿öµå¸¦ ½ÇÇàÇغ¸µµ·Ï ÇÏÀÚ. ÃÖÃÊ ¹®¼­1À̶ó´Â ºó ¹®¼­ À©µµ¿ì¸¦ Çϳª ¿­¾î ÁØ´Ù. ÀÌ ¹®¼­¸¦ ÆíÁýÇÏÁö ¾ÊÀº »óÅ¿¡¼­ ´Ù¸¥ ¹®¼­ ÆÄÀÏÀ» ¿­¸é ¹®¼­1Àº »ç¶óÁö°í »õ·Î ÀÐÀº ¹®¼­ ÆÄÀÏÀ» ÆíÁýÇϱ⠽ÃÀÛÇÒ °ÍÀÌ´Ù. ¸¸¾à ±âº»ÀûÀ¸·Î ¿­¸®´Â ¹®¼­1¿¡ ÇÑ ±ÛÀÚ¶óµµ ÀÔ·ÂÀ» ÇÑ »óȲ¿¡¼­ ´Ù¸¥ ¹®¼­ ÆÄÀÏÀ» ¿­¸é ¹®¼­1Àº °è¼Ó À¯ÁöµÇ°í »õ·Î¿î â¿¡ ¹®¼­ ÆÄÀÏÀÌ ¿­¸°´Ù.

±âº»ÀûÀ¸·Î ¸¸µé¾î ÁØ ¡®¹®¼­1¡¯À̶ó´Â À©µµ¿ì´Â »ç¿ëÀÚ°¡ ¹®¼­¸¦ »õ·Î ÀÛ¼ºÇÒ °ÍÀ¸·Î ¿¹»óÇÏ°í ¼­ºñ½º Â÷¿ø¿¡¼­ ¹Ì¸® ¸¸µé¾î ³õÀº °ÍÀε¥ »ç¿ëÀÚ°¡ µû·Î ÆÄÀÏÀ» ¿­¾ú´Ù¸é ÀÌ ¿¹»óÀÌ ºø³ª°£ °ÍÀÌ´Ù. ±×·¡¼­ ¡®¹®¼­1¡¯Àº ´õ ÀÌ»ó ÇÊ¿ä°¡ ¾øÀ¸¸ç ´Ý¾Æ¾ß ÇÑ´Ù. Dangeunµµ ÀÌ¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î À©µµ¿ì¸¦ °ü¸®ÇÑ´Ù.

OpenFileToChild ÇÔ¼ö´Â hChild¿¡ Path ÆÄÀÏÀ» ÀоîÁØ´Ù. Ae.InitDocÀ» È£ÃâÇÏ¿© ¹®¼­¸¦ ÃʱâÈ­ÇÏ°í ÆÄÀÏÀÇ Å©±â¸¦ Á¶»çÇÏ¿© ±× Å©±â¿¡ ³ÎÁ¾·á ¹®ÀÚ¸¦ À§ÇÑ 1À» ´õÇÑ ¸¸Å­ ¹öÆÛ¸¦ ÇÒ´çÇÏ°í ÆÄÀÏÀÇ ³»¿ëÀ» Àд´Ù. ±×¸®°í SetText ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÆÄÀÏ ³»¿ëÀ» ¹öÆÛ¿¡ Àü¼ÛÇÑ´Ù. ¾ÆÁÖ ÀϹÝÀûÀÎ ÆÄÀÏ ÀÔÃâ·Â ¹®Àå»ÓÀ̹ǷΠÀÌÇØÇϱ⠾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. »õ·Î ÀÐÀº ÆÄÀÏÀ̹ǷΠº¯°æÇ÷¡±×´Â ¸®¼ÂµÇ°í hChildÀÇ NowFile¿¡ »õ ÆÄÀϸíÀ» Àû¾î³Ö°í âÀÇ Ä¸¼ÇÀ» ¹Ù²Ù´Â Á¤µµÀÇ Ãß°¡ 󸮵µ °°ÀÌ ÇÏ°í ÀÖ´Ù.

OpenFileToChild ÇÔ¼ö´Â ¼º°øÇÒ °æ¿ì TRUE¸¦ ¸®ÅÏÇÏ¸ç ½ÇÆÐÇÒ °æ¿ì FALSE¸¦ ¸®ÅÏÇÑ´Ù. OpenFromFile ÇÔ¼ö´Â ÀÌ ÇÔ¼ö°¡ FALSE¸¦ ¸®ÅÏÇÒ °æ¿ì »õ·Î ¸¸µç âÀ» Æı«ÇÏ°í ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. MDIÀÇ Â÷Àϵ带 Æı«ÇÒ ¶§´Â DestroyWindow ÇÔ¼ö¸¦ »ç¿ëÇؼ­´Â ¾ÈµÇ¸ç ¹Ýµå½Ã WM_MDIDESTROY ¸Þ½ÃÁö¸¦ º¸³»¾ß ÇÑ´Ù.

ÆÄÀÏ Å©±â Á¦ÇÑ

OpenFileToChild´Â ÆÄÀÏÀ» ¿­±â Àü¿¡ ÆÄÀÏ ¿ë·®À» È®ÀÎÇÏ¿© 30MB¸¦ ³ÑÀ» °æ¿ì ÀÌ ÆÄÀÏÀ» Á¤¸»·Î ¿­ °ÍÀÎÁö »ç¿ëÀÚ¿¡°Ô È®ÀÎÀ» ÇÑ´Ù. »ç¿ëÀÚ°¡ ÀÌ Áú¹®¿¡ ¿¹¶ó°í ´ë´äÀ» ÇÒ ¶§¸¸ ÆÄÀÏÀ» ¿­¾î ÁÖ°í ±×·¸Áö ¾ÊÀ¸¸é ½ÇÆзΠ°£ÁÖÇÏ°í FALSE¸¦ ¸®ÅÏÇϵµ·Ï µÇ¾î ÀÖ´Ù. DangeunÀº ÆíÁý ¿ë·®ÀÌ ÀÌ·ÐÀûÀ¸·Î ¹«ÇÑ´ëÀ̹ǷΠ±»ÀÌ ÆÄÀÏÀÇ ¿ë·®À» Á¦ÇÑÇÒ ÇÊ¿ä±îÁö´Â ¾ø´Ù. Å« ÆÄÀÏÀ» ¿­¸é ºñ·Ï ´À·ÁÁö±â´Â ÇÏ°ÚÁö¸¸ »ç¿ëÀÚ°¡ ±×·¸°Ô ÇÏ°Ú´Ù¸é ±»ÀÌ ¸»¸± ÇÊ¿ä´Â ¾ø´Â °ÍÀÌ´Ù.

±×·³¿¡µµ ºÒ±¸ÇÏ°í 30MBÀÇ ¿ë·®¿¡ ´ëÇØ ±ÍÂú°Ô Áú¹®À» ÇÏ´Â ÀÌÀ¯´Â »ç¿ëÀÚÀÇ È®½ÇÇÑ ¿­±â ¿äûÀÌ ¾Æ´Ï¶ó ´ë°³ÀÇ °æ¿ì ½Ç¼ö¿¡ ÀÇÇÑ ¿­±â ¿äûÀÏ È®·üÀÌ ³ô±â ¶§¹®ÀÌ´Ù. Àü¹ÝÀûÀ¸·Î ½Ã½ºÅÛ ¼º´ÉÀÌ Çâ»óµÇ°í ±â¾ï ÀåÄ¡ÀÇ ¿ë·®ÀÌ Ä¿Áö´Ù º¸´Ï 650MBÀÇ Mpeg ÆÄÀϵéÀÌ ÈçÇÏ°Ô ÀÛ¼ºµÇ°í DVDÀÇ °æ¿ì GB ´ÜÀ§ÀÇ ÆÄÀϵµ Á¸ÀçÇÑ´Ù. ¿µÈ­ ÀÚ¸· ÆÄÀÏÀ» ¿¬´Ù´Â °ÍÀÌ ½Ç¼ö·Î Avi ÆÄÀÏÀ» ¼±ÅÃÇߴٰųª ÇÒ °æ¿ì¸¦ ¾ó¸¶µçÁö °¡Á¤ÇØ º¼ ¼ö Àִµ¥ ÀÌ·² ¶§ »ç¿ëÀÚÀÇ ÁøÂ¥ Àǵµ¸¦ È®ÀÎÇØ º¼ ÇÊ¿ä°¡ ÀÖ´Â °ÍÀÌ´Ù.

¸¸¾à ÀÌ·± È®ÀÎÀ» ÇÏÁö ¾Ê°í ¹«Á¶°Ç ÆÄÀÏÀ» ¿­¾î ¹ö¸°´Ù¸é ±× °á°ú´Â ¿¹»ó¿Ü·Î ½É°¢ÇÏ´Ù. 650MB ÆÄÀÏÀ» ½Ç¼ö·Î ¿­ °æ¿ì DangeunÀº 650MBÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ·Á°í ÇÒ °ÍÀÌ´Ù. ¿î¿µÃ¼Á¦´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸Þ¸ð¸® ¿ä±¸¸¦ °áÄÚ °ÅÀýÇÏÁö ¾Ê´Â´Ù. 100GB °°Àº Å͹«´Ï¾ø´Â ¾çÀÌ ¾Æ´Ï¶ó¸é ¿øÄ¢ÀûÀ¸·Î ¿î¿µÃ¼Á¦´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¿ä±¸ÇÑ ¾çÀ» ÇÒ´çÇϵµ·Ï µÇ¾î ÀÖÀ¸¸ç ¿ä±¸ÇÑ ¾çÀÇ ¸Þ¸ð¸®¸¦ ³» ÁÖ±â À§ÇØ ¸ðµç Á¶Ä¡¸¦ ÃëÇÏ°Ô µÈ´Ù. ¸¶Ä¡ ºÎ¸ð°¡ ±Í¿©¿î ÀÚ½ÄÀÇ ¿ä±¸¸¦ °ÅÀýÇÏÁö ¸øÇÏ´Â °Íó·³ ¸»ÀÌ´Ù.

ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¡®¾Æºü. ³ª 650MB¸¸¡¯, ±×·¯¸é ¿î¿µÃ¼Á¦´Â ¡®±×·¡! Á» ±â´Ù·ÁºÁ. ³» ¹«½¼ ¼ö¸¦ ¾²´õ¶óµµ 650MB ¸¸µé¾î ÁÖÁö¡¯. À̶§ºÎÅÍ ºÒÇàÀÌ ½ÃÀ۵Ǵ °ÍÀÌ´Ù. ¿î¿µÃ¼Á¦´Â ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â ¸ðµç ¹°¸® ¸Þ¸ð¸®¸¦ ºñ¿ì°í ÆäÀÌ¡ ÆÄÀÏÀÇ ³²´Â °ø°£À» Á¤¸®ÇÏ¿© 650MB¸¦ ¸¸µé¾î³»±â À§ÇØ ¾È°£ÈûÀ» ¾²¸ç ÃÖ¼±À» ´ÙÇÑ´Ù. ¸¸¾à ±×·¡µµ 650MB ¿ë·®À» È®º¸ÇÏÁö ¸øÇÒ °æ¿ì Çϵåµð½ºÅ©ÀÇ °¡»ó ¸Þ¸ð¸® °ø°£À» ´Ã·Á(»ç¿ëÀÚ¿¡°Ô ¹¯Áöµµ ¾Ê°í) °á±¹Àº 650MB¸¦ ¸¸µé¾î ³»±â À§ÇØ ±Ø´ÜÀÇ Á¶Ä¡±îÁöµµ ¼­½¿Áö ¾Ê´Â´Ù.

¿î¿µÃ¼Á¦ÀÇ ÀÌ ½Ãµµ´Â ½Ã½ºÅÛ »óȲ¿¡ µû¶ó ½ÇÆÐÇÒ ¼öµµ ÀÖ°í ¼º°øÇÒ ¼öµµ ÀÖ´Ù. 512MB ·¥À» °¡Áø ½Ã½ºÅÛÀº °ÅÀÇ 100% ¼º°øÇϸç 256MB Á¤µµÀÇ ·¥ÀÌ ÀåÂøµÈ ½Ã½ºÅÛÀ̶ó¸é ¼º°øÇÒ È®·üÀÌ ¾ÆÁÖ ³ôÀ¸¸ç ±× ÀÌÇ϶ó¸é ½ÇÆÐÇÒ °æ¿ìµµ ÀÖ´Ù. ±×·¯³ª ¼º°øÀÌµç ½ÇÆÐµç ¾çÂÊ ´Ù ¹®Á¦°¡ µÈ´Ù. ¼³»ç ¼º°øÇÑ´Ù ÇÏ´õ¶óµµ ÇÑ ÇÁ·Î±×·¥ÀÌ 650MB¸¦ ¾²°í ÀÖ´Â »óȲÀ̶ó¸é ´Ù¸¥ ÇÁ·Î±×·¥µéÀÌ ¾î¶»°Ô µ¹¾Æ°¥Áö, ±× ÀÌÈÄÀÇ ½Ã½ºÅÛ »óȲÀÌ ¾îÂî µÉÁö´Â ¾È ºÁµµ »·ÇÏ´Ù.

½ÇÆÐÇÒ °æ¿ì ¿¡·¯ ¸Þ½ÃÁö°¡ ¶ß±â´Â ÇÏÁö¸¸ ÃÖÁ¾ÀûÀ¸·Î ½ÇÆÐ ÆÇ´ÜÀ» Çϱâ±îÁö ¾à 10ºÐ Á¤µµ°¡ ¼Ò¿äµÈ´Ù. ½ÇÇàÁßÀÎ ÇÁ·Î±×·¥ÀÌ ¸¹°í CPU°¡ ´À¸®´Ù¸é 30ºÐÀÌ °É¸± ¼öµµ ÀÖ´Ù. ÆäÀÌ¡ ÆÄÀÏÀ» ´Ã¸®´Â ÀÛ¾÷Àº ¾Æ¹«¸® ¿î¿µÃ¼Á¦¶ó ÇÏ´õ¶óµµ º¸Åë ÀÏÀÌ ¾Æ´Ñ °ÍÀÌ´Ù. ¸Þ¸ð¸® ÇÒ´çÁßÀÎ ÇÁ·Î¼¼¼­´Â ÀÛ¾÷ °ü¸®ÀÚ·Î Á×ÀÌÁöµµ ¸øÇÏ¸ç »ç¿ëÀÚ´Â 10ºÐ µ¿¾È ¸Þ¸ð¸® ÇÒ´ç ¼º°ø ¶Ç´Â ½ÇÆи¦ ±â´Ù¸®°Å³ª ¾Æ´Ï¸é Àü¿øÀ» ³»¸®´Â ¼ö¹Û¿¡ ¾ø´Ù. °á±¹ ÀÌ »óÅ´ ´Ù¿î »óÅÂ¿Í °ÅÀÇ À¯»çÇÑ »óÅ°¡ µÇ°í ¸¸´Ù. ÀÌ »óȲÀÌ ½Ç°¨ÀÌ ³ªÁö ¾ÊÀ¸¸é ´Ù¸¥ ÆíÁý±â·Î ¶Ç´Â ´ç±ÙÀ¸·Î 650MB ÆÄÀÏÀ» ¿­¾î Á÷Á¢ Å×½ºÆ®Çغ¸¾Æ¶ó. Á¤¸»·Î ´Ù¿î°ú ¶È°°¾ÆÁö¸ç ½ÇÁ¦·Î ´Ù¿îµÉ ¼öµµ ÀÖ´Ù.

»ç¿ëÀÚÀÇ Àǵµ°¡ 100MBµç 1GBµç ¾î·µç ÀÌ ÆÄÀÏÀ» º¸°í ½Í´Ù¸é ½Ã½ºÅÛÀÇ ¸ðµç ¸Þ¸ð¸®¸¦ µ¿¿øÇÏ¿© º¸¿©ÁÖ¾î¾ß°ÚÁö¸¸ ½Ç¼öÀÏ °æ¿ì´Â ±× °á°ú°¡ Ȳ´çÇØÁö¹Ç·Î Á» ±ÍÂú´õ¶óµµ È®ÀÎÀ» Çϵµ·Ï Çß´Ù. 30MB¶ó´Â Å©±â´Â ½Ã½ºÅÛ¿¡ ¹«¸®°¡ °¥ °¡´É¼ºÀÌ ÀÖ´Â ÃÖ¼Ò Å©±â·Î °è»êµÈ °ÍÀ̸ç CPU¼º´ÉÀ̳ª ¹°¸® ¸Þ¸ð¸®ÀÇ ¾ç¿¡ µû¶ó ´õ Å©°Ô ÀâÀ» ¼öµµ ÀÖ´Ù.

Á¤¸®

»ç¿ëÀÚ°¡ ÆÄÀÏ/¿­±â Ç׸ñÀ» ¼±ÅÃÇϸé Open ÇÔ¼ö°¡ È£ÃâµÈ´Ù. ÀÌ ÇÔ¼ö´Â ÆÄÀÏ¿­±â ´ëÈ­»óÀÚ¸¦ º¸¿©ÁÖ°í ÀÐÀ» ÆÄÀϸíÀ» ¼±ÅÃÇϸé OpenFromFile ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. OpenFromFile ÇÔ¼ö´Â ÀÌ¹Ì ¿­¸° ÆÄÀÏÀÎÁö, ºó À©µµ¿ì°¡ ÀÖ´ÂÁö¸¦ º¸°í ºó À©µµ¿ì¸¦ Àç»ç¿ëÇϵçÁö ¾Æ´Ï¸é »õ À©µµ¿ì¸¦ ¸¸µç ÈÄ OpenFileToChild ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. OpenFileToChild ÇÔ¼ö´Â ½ÇÁ¦·Î ÆÄÀÏÀ» ¿­¾î À©µµ¿ì¿¡ Ãâ·ÂÇÏ°í ¸î °¡Áö À⽺·¯¿î 󸮱îÁö ´ã´çÇÏ°í ÀÖ´Ù. °á±¹ ÀÌ ¼¼ ÇÔ¼ö°¡ ¿¬¼ÓÀûÀ¸·Î È£ÃâµÇ¾î¾ß¸¸ ÆÄÀÏÀÌ Á¦´ë·Î ¿­¸®¸ç ÇÑ ±ºµ¥¶óµµ ½ÇÆÐÇϸé ÆÄÀÏÀº ¿­¸®Áö ¾Ê´Â´Ù.

±×·¸´Ù¸é ÆÄÀÏ¿­±â ±â´ÉÀ» Open ÇÔ¼ö¿¡ ´Ù ÀÛ¼ºÇÏÁö ¿Ö ÀÌ·¸°Ô ¼¼ ÇÔ¼ö·Î ±â´ÉÀ» ºÐÇÒÇسõ¾Ò´ÂÁö Àǹ®ÀÌ µé °ÍÀÌ´Ù. ÆÄÀÏ¿­±â µ¿ÀÛÀ» °¢ ´Ü°èº°·Î ÀÌ·¸°Ô ³ª´©¾î ³õÀº ÀÌÀ¯´Â ÆÄÀÏÀ» ¿©´Â ¹æ¹ýÀÌ ´Ù¾çÇϱ⠶§¹®ÀÌ´Ù. ¸Þ´º¸¦ ÅëÇØ ¿­ ¶§´Â ÆÄÀÏ¿­±â °øÅë ´ëÈ­»óÀÚºÎÅÍ ½ÃÀÛÇÏÁö¸¸ ½© ¿ÀÇÂÀ̳ª ¸í·ÉÇàÀ¸·Î ÆÄÀϸíÀ» Àü´Þ¹Þ´Â °æ¿ì´Â ÆÄÀϸíÀ» ÀÌ¹Ì ¾Ë°í Àֱ⠶§¹®¿¡ OpenFromFile ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù. ¶ÇÇÑ ÀÌ¹Ì ¿­¸° ÆÄÀÏÀÌ ¾Æ´Ï°í ´ë»ó Â÷Àϵ带 ¾Ë°í ÀÖ´Ù¸é OpenFileToChild ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

Â÷ÈÄ¿¡ ³×Æ®¿öÅ© Áö¿ø, FTP Áö¿ø, ÇÁ·ÎÁ§Æ® ±â´ÉÀ» ÀÛ¼ºÇϸé ÆÄÀÏÀ» ¿©´Â ¹æ¹ýÀº Á¡Á¡ ´õ ´Ù¾çÇØÁö¸ç ±×¶§¸¶´Ù È£ÃâÇØ¾ß ÇÒ ÇÔ¼ö°¡ ´Þ¶óÁö±â ¶§¹®¿¡ ÀÌ·¸°Ô ÇÔ¼öµéÀÌ ºÐÇҵǾî ÀÖ´Ù.