3.º£Å¸ 2

°¡.¹ö±×¼öÁ¤

Áö±ÝºÎÅÍ º£Å¸ 1ÀÇ ¹ö±×¸¦ ¼öÁ¤ÇÏ¿© º£Å¸ 2¸¦ ¸¸µé °ÍÀÌ´Ù. º£Å¸ 1À» ¹ßÇ¥ÇÑ ÈÄ 2ÁÖ Á¤µµ ¹ö±× º¸°í¸¦ ±â´Ù·ÈÀ¸³ª ¾Æ¹«·± º¸°í°¡ ¾ø¾î °³¹ßÀÚ°¡ ¹ß°ßÇÑ ¹ö±×¸¸ ¼öÁ¤Çß´Ù. »ç½Ç ÈξÀ ´õ ¸¹Àº ¹ö±×°¡ ÀÖ°ÚÁö¸¸ ¾ÆÁ÷ ÀüÇô »ç¿ëÀÚ¸¦ È®º¸ÇÏÁö ¸øÇ߱⠶§¹®¿¡ ¹ö±× º¸°íµµ Á¦´ë·Î ¸ø¹Þ°í ÀÖ´Ù. ¹ö±×°¡ ¸¹¾Æ¼­ »ç¿ëÀÚ°¡ ¾ø°í ±×·¯´Ù º¸´Ï ¹ö±×µµ ¸ø °íÄ¡´Â ¾Ç¼øȯÀÌ °è¼ÓµÇ´Âµ¥ ÀÌ·± »óȲÀ» Ÿ°èÇϱâ À§Çؼ­´Â °³¹ßÀÚ º»ÀÎÀÌ ºÎÁö·±ÇÑ °Í ¿Ü¿¡´Â ´Ù¸¥ µµ¸®°¡ ¾ø´Â °Í °°´Ù.

¹ö±×¸¦ ¹ß°ßÇÒ ¶§¸¶´Ù ½Ç½À ¹®¼­¸¦ ¼öÁ¤ÇÏ¿© ÇØ°áÇÒ ¼öµµ ÀÖ°í ½ÇÁ¦·Î º£Å¸ 1±îÁö´Â ÀÌ·± ½ÄÀ¸·Î ¹®¼­¸¦ °ü¸®ÇßÁö¸¸ ³Ê¹« ¹ø°Å·Ó´Ù. Áö±Ý±îÁöÀÇ ½Ç½À ÇÁ·ÎÁ§Æ®´Â ´Ü°èº°·Î µÇ¾î À־ ¾ÕÂÊÀ» ¼öÁ¤ÇÏ¸é µÚÂʵµ ¸ðµÎ °°ÀÌ ¼öÁ¤ÇØ¾ß ÇϹǷΠ½Ã°£ÀÌ ³Ê¹« ¸¹ÀÌ °É¸°´Ù. ±×·¡¼­ º£Å¸ 1±îÁöÀÇ ½Ç½À °úÁ¤ ¹®¼­´Â ¹ö±×°¡ Àִ ä·Î ±×´ë·Î À¯ÁöÇÏ°í ÃÖÁ¾ ¹öÀü¸¸ ¼öÁ¤ÇÏ¿© º£Å¸ 2¸¦ ¸¸µé °ÍÀÌ´Ù. ÀÌ ½Ç½ÀÀ» ÅëÇØ ¾î¶² ÀÌÀ¯·Î ¹ö±×°¡ ¹ß»ýÇÏ¸ç ¾î¶² ½ÄÀ¸·Î ¹ö±×¸¦ ÇØ°áÇÏ´ÂÁö¸¦ °æÇèÇØ º¸±â ¹Ù¶õ´Ù.

¹öÀü Á¤º¸ Ç¥½Ã

º£Å¸ 1¿¡¼­ º£Å¸ 2·Î ¹öÀüÀÌ ¹Ù²î¹Ç·Î ŸÀÌƲ ¹ÙÀÇ Á¦¸ñµµ ¼öÁ¤ÇÑ´Ù. ¾Æ¹«¸® »ç¼ÒÇÑ º¯È­Áö¸¸ À̰͵µ ÀÏÁ¾ÀÇ ¾÷±×·¹À̵åÀ̹ǷΠ´ç¿¬È÷ ¹öÀü Ç¥½Ã¸¦ ÇØ¾ß ÇÑ´Ù.

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

            ,LPSTR lpszCmdParam,int nCmdShow)

{

     ....

     hWnd=CreateWindow(lpszClass,"´ç±Ù Beta2",WS_OVERLAPPEDWINDOW | WS_VISIBLE |

          WS_CLIPCHILDREN,

          CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

          NULL,(HMENU)NULL,hInstance,NULL);

 

¸¶Âù°¡Áö·Î ÇÁ·Î±×·¥ ¼Ò°³ ´ëÈ­»óÀÚÀÇ ½ºÅÂƽµµ º£Å¸ 1¿¡¼­ º£Å¸ 2·Î º¯°æÇÑ´Ù. ÀÌÈÄ ¹öÀüÀÌ º¯°æµÉ ¶§¸¶´Ù ÀÌ µÎ ±ºµ¥´Â °è¼Ó ¼öÁ¤ÇØ¾ß ÇÑ´Ù. Â÷ÈÄ¿¡´Â ¹öÀü ¸®¼Ò½º¿¡¼­ Àо Ãâ·ÂÇÏ´Â °ÍÀ¸·Î º¯°æÇÒ °èȹÀÌ´Ù. ±×µ¿¾È ÀÛ¼ºÀ» ¿¬±âÇØ µÎ¾ú´ø µµ¿ò¸»µµ ÀÛ¼ºÇßÀ¸¹Ç·Î µµ¿ò¸»ÀÇ ¸µÅ©¸¦ Á¦°øÇÑ´Ù.

 

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

{

     ....

     case IDM_HELP_INDEX:

          ShellExecute(hWnd,"open","http://www.winapi.co.kr/project/dangeun/manual/manual.htm",NULL,NULL,SW_SHOW);

          break;

 

°ü¸® »çÀÌÆ®ÀÇ °íÁ¤µÈ URL·Î À̵¿Çß´Ù. ÀÌ ÆäÀÌÁö¿¡ ´ç±ÙÀÇ ¿Â¶óÀÎ µµ¿ò¸»À» Á¦°øÇÏ°í Áö¼ÓÀûÀ¸·Î °ü¸®ÇÒ °ÍÀÌ´Ù. ¿ÀÇÁ¶óÀÎÀ¸·Î °°ÀÌ ¹èÆ÷µÇ´Â µµ¿ò¸»Àº ´çºÐ°£ Á¦°øÇÏÁö ¾Ê´Â´Ù.

´ëÈ­»óÀÚ À§Ä¡ Á¶Á¤

´ç±ÙÀº ¸ðµç ´ëÈ­»óÀÚ¸¦ ºÎ¸ðÀÇ Áß¾Ó¿¡ ¿­¸ç ÀÌ Ã³¸®¸¦ MoveToParentCenter ÇÔ¼ö°¡ ´ã´çÇÑ´Ù. ±×·¯³ª ÀÌ ÇÔ¼öÀÇ ³í¸®°¡ ³Ê¹« Çã¼úÇؼ­ ´ëÈ­»óÀÚ°¡ ¾Èº¸À̰ųª ŸÀÌƲ ¹Ù°¡ ¼û°ÜÁö´Â °æ¿ì°¡ ÀÖ´Ù. ¿¹¸¦µé¾î ¸ÞÀÎ À©µµ¿ì ³ôÀ̸¦ ¾ÆÁÖ ³·°Ô ÇØ µÎ°í È­¸é À§ÂÊ¿¡¼­ ´ëÈ­»óÀÚ¸¦ È£ÃâÇÒ ¶§ ´ëÈ­»óÀÚ Å¸ÀÌƲ ¹Ù°¡ È­¸é À§ÂÊ¿¡ ¹èÄ¡µÈ´Ù. ºÎ¸ðº¸´Ù ´õ Å« ÀÚ½ÄÀÌ ºÎ¸ðÀÇ Áß¾Ó¿¡ ¿À·Á¸é À§ÂÊÀ¸·Î ¿Ã¶ó°¥ ¼ö¹Û¿¡ ¾ø´Â °ÍÀÌ´Ù.

´õ ½É°¢ÇÑ °æ¿ìµµ ÀÖ´Ù. ºÎ¸ðÀÇ ³ôÀ̸¦ ¾ÆÁÖ ³ô°Ô ÇØ µÎ°í È­¸éÀÇ ¾Æ·¡ÂÊÀ¸·Î ³»·Á À©µµ¿ì°¡ È­¸é ¹ÛÀ» ¹þ¾î³ª°Ô ÇØ µÎ°í ´ëÈ­»óÀÚ¸¦ ¿­¸é ¾Æ¿¹ º¸ÀÌÁöµµ ¾Ê´Â´Ù. Å°°¡ Å« ºÎ¸ðÀÇ Áß¾Ó À§Ä¡¸¦ ã´Ù º¸´Ï È­¸é ¹Ù±ùÀ¸·Î ¹þ¾î³ª ¹ö¸®´Â °ÍÀÌ´Ù. ÀÌ »óÅ¿¡¼­´Â ¸¶¿ì½º·Î ´ëÈ­»óÀÚ¸¦ À̵¿ÇÒ ¼ö ¾øÀ¸¹Ç·Î ¾î¿ ¼ö ¾øÀÌ Å°º¸µå·Î ¼ÕÀÌ °¡¾ß ÇϹǷΠºÒÆíÇÏ´Ù.

ÀÌ·¸°Ô µÇÁö ¾ÊÀ¸·Á¸é ºÎ¸ðÀÇ Áß¾ÓÀ¸·Î ÀÏ´Ü À̵¿Ç쵂 ÀÚ½ÅÀÇ ÀϺΰ¡ È­¸é¿¡ °¡·ÁÁ® ÀÖÀ¸¸é ¸ð´ÏÅÍ ¾ÈÂÊÀ¸·Î ÁÂÇ¥¸¦ Á¶Á¤ÇØ¾ß ÇÑ´Ù. °£´ÜÇÑ ¹®Á¦ÀÎ °Í °°Áö¸¸ ´ÙÁß ¸ð´ÏÅÍ È¯°æ±îÁö °í·ÁÇØ¾ß ÇϹǷΠÁ¶±Ý º¹ÀâÇÏ´Ù. ÀÌ ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void MoveToParentCenter(HWND hWnd)

{

     RECT wrt,crt;

     HWND hParent;

     RECT rt,irt;

     HMONITOR hMon;

     MONITORINFOEX mi;

 

     hParent=GetParent(hWnd);

     if (hParent == NULL) {

          return;

     }

     if (IsIconic(hParent)) {

          ShowWindow(hParent,SW_RESTORE);

     }

 

     GetWindowRect(hParent,&wrt);

     GetWindowRect(hWnd,&crt);

     rt.left=wrt.left+(wrt.right-wrt.left)/2-(crt.right-crt.left)/2;

     rt.top=wrt.top+(wrt.bottom-wrt.top)/2-(crt.bottom-crt.top)/2;

     rt.right=rt.left+(crt.right-crt.left);

     rt.bottom=rt.top+(crt.bottom-crt.top);

 

     // ¸¹ÀÌ °ÉÃÄÁø ¸ð´ÏÅÍÀÇ ¿öÅ© ¿¡¸®¾î¿¡ ¿ÏÀüÈ÷ Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ¸¸é ÁÂÇ¥¸¦ Á¶Á¤ÇÑ´Ù.

     hMon=MonitorFromWindow(hWnd,MONITOR_DEFAULTTOPRIMARY);

     mi.cbSize=sizeof(MONITORINFOEX);

     GetMonitorInfo(hMon,&mi);

     IntersectRect(&irt,&rt,&mi.rcWork);

     if (EqualRect(&irt,&rt)==FALSE) {

          // ¸ð´ÏÅÍ ¾ÈÀ¸·Î ¼öÁ÷ À̵¿

          if (rt.top < mi.rcWork.top) {

              rt.top=mi.rcWork.top;

          } else if (rt.bottom > mi.rcWork.bottom) {

              rt.top=mi.rcWork.bottom-(rt.bottom-rt.top);

          }

          // ¸ð´ÏÅÍ ¾ÈÀ¸·Î ¼öÆò À̵¿

          if (rt.left < mi.rcWork.left) {

              rt.left=mi.rcWork.left;

          } else if (rt.right > mi.rcWork.right) {

              rt.left=mi.rcWork.right-(rt.right-rt.left);

          }

     }

 

     SetWindowPos(hWnd,HWND_NOTOPMOST,rt.left,rt.top,0,0,SWP_NOSIZE);

}

 

MonitorFromWindow ÇÔ¼ö´Â ÁöÁ¤ÇÑ À©µµ¿ìÀÇ ¿µ¿ªÀÌ ¸¹ÀÌ °ÉÄ£ ¸ð´ÏÅÍÀÇ ÇÚµéÀ» ±¸Çϸç GetMonitorInfo ÇÔ¼ö´Â ¸ð´ÏÅÍÀÇ ¿©·¯ °¡Áö Á¤º¸¸¦ ±¸ÇÑ´Ù. ¸ð´ÏÅÍÀÇ ¿öÅ© ¿¡¸®¾î ÁÂÇ¥¿¡ ´ëÈ­»óÀÚ°¡ ¿ÏÀüÈ÷ Æ÷ÇԵǴÂÁö¸¦ Á¡°ËÇØ º» ÈÄ ±×·¸Áö ¾Ê´Ù¸é ¸ð´ÏÅÍ ¾ÈÂÊÀ¸·Î ´ëÈ­»óÀÚÀÇ ÁÂÇ¥¸¦ Á¶Á¤ÇÑ´Ù. ÀÌÁ¦ ¾î¶² °æ¿ì¶óµµ ´ëÈ­»óÀÚ°¡ Á¦´ë·Î º¸ÀÏ °ÍÀÌ´Ù.

ÇÁ·ÎÁ§Æ® âÀÇ ³ôÀÌ

Ãâ·Ââ, ÆÄÀÏâ, »ó¿ë±¸ âÀÌ ¸ðµÎ º¸ÀÌ´Â »óÅ¿¡¼­ ¸ÞÀÎ À©µµ¿ì¸¦ ÀÛ°Ô Ãà¼ÒÇϸé ÆÄÀÏâÀÇ ÀϺκÐÀÌ »ç¶óÁ³´Ù°¡ ´Ù½Ã ³ªÅ¸³ª´Â ÀÌ»óÇÑ Áõ»óÀ» º¸ÀδÙ. Ãâ·ÂâÀÌ º¸ÀÌ´Â »óÅ¿¡¼­ Ãâ·Ââ ³ôÀ̺¸´Ù ¸ÞÀÎ À©µµ¿ì¸¦ ´õ ÀÛ°Ô Á¡Á¡ Ãà¼ÒÇØ º¸¸é È®ÀÎÇÒ ¼ö ÀÖ´Ù.

  

ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â »ó¿ë±¸ âÀÇ ³ôÀÌ°¡ À½¼ö°¡ µÇ°í ±× ³ª¸ÓÁö¸¦ ÆÄÀÏâÀÇ ³ôÀÌ·Î °è»êÇϱ⠶§¹®Àε¥ ´ÙÀ½ ÇÑ ÁÙ¸¸ Ãß°¡ÇÏ¸é µÈ´Ù.

 

void GetChildSize(int &t,int &s,int &f,int &o,int &w,int &ch)

{

     ....

     // Ŭ¶óÀ̾ðÆ® ¿µ¿ªÀÌ À½¼öÀε¥ Ãâ·ÂâÀÌ º¸ÀÌ´Â »óŸé Ãâ·ÂâÀÇ ³ôÀ̸¦ ÁÙ¿©

     // À§ÂÊÀÇ ÆÄÀÏÅÇ, Åø¹Ù µî°ú ´êÁö ¾Ê°Ô ÇÑ´Ù.

     if (c < 0 && o) {

          o=crt.bottom-(t+s+f+GAP);

        c=0;

     }

 

c´Â MDI Ŭ¶óÀ̾ðÆ® ¿µ¿ªÀÇ ³ôÀÌÀε¥ ÀÌ °ªÀÌ À½¼ö°¡µÇ¸é Ãâ·Â âÀÇ ³ôÀ̸¦ Á¶Á¤ÇÏ¿© Ãâ·ÂâÀÌ À§ÂÊÀÇ Åø¹Ù³ª, ÆÄÀÏÅÇ°ú °ãÄ¡Áö ¾Ê°Ô ÇÑ´Ù. ÀÌ°ÍÀº ´ç¿¬ÇÑ Á¶Ä¡À̳ª c°¡ À½¼öÀÎ »óŸ¦ ±×´ë·Î ¹æÄ¡Çϱ⠶§¹®¿¡ ¹Ù·Î ¾Æ·¡ÂÊÀÇ »ó¿ë±¸ â ³ôÀ̸¦ °è»êÇÏ´Â ½Ä¿¡¼­ ch°¡ À½¼ö°¡ µÈ´Ù. ÀÌ °ªÀÌ À½¼ö°¡ µÇ¸é ÆÄÀÏâÀº ¿ÀÈ÷·Á ¾ç¼ö°¡ µÇ¾î »ç¶óÁ³´Ù°¡ ´Ù½Ã º¸ÀÌ´Â °ÍÀÌ´Ù.

»óŶõÀÇ Æø °è»ê ¹ö±×

´ç±ÙÀÇ »óŶõÀº °íÁ¤µÇ¾î ÀÖÁö ¾Ê°í ¼³Á¤ ´ëÈ­»óÀÚ¿¡¼­ »ç¿ëÀÚ°¡ º¸°íÀÚ ÇÏ´Â ÆÄÆ®¸¦ ¼±ÅÃÇÒ ¼ö ÀÖÀ¸¸ç ¼ø¼­¸¦ º¯°æÇÒ ¼öµµ ÀÖ´Ù. À̶§ ÆÄÆ®ÀÇ ¼ø¼­¸¦ º¯°æÇϸé ÆøÀ» Á¦´ë·Î °è»êÇÏÁö ¸øÇÏ´Â ¹ö±×°¡ Àִµ¥ ÆÄÆ®¿¡ ÆøÀ» ÇÒ´çÇÏ´Â ·çÇÁ¿¡ ¹®Á¦°¡ ÀÖ´Ù.

 

void SetStatusPart()

{

     ....

     if (g_ChildNum) {

          // º¸ÀÌ´Â ¸ðµç ÆÄÆ®ÀÇ ÆøÀ» ÇÕÇÔ

          for (i=0,TotalWidth=0;i<STNUM;i++) {

              if (Option.StMask[i].bShow) {

                   TotalWidth+=Option.StMask[i].Width;

              }

          }

          SBPart[0]=max(200,crt.right-TotalWidth);

 

          // ¼ø¼­¿¡ µû¶ó ·çÇÁ¸¦ µ·´Ù.

        for (i=0,Num=0;i<STNUM;i++) {

           idx=Option.GetStNumByOrder(i);

           if (idx != -1 && Option.StMask[idx].bShow) {

               Num++;

               SBPart[Num]=SBPart[Num-1]+Option.StMask[idx].Width;

           }

        }

          SendMessage(hStatus, SB_SETPARTS, Num+1, (LPARAM)SBPart);

     } else {

     ....

 

ÆÄÆ®ÀÇ ¼ø¼­°ªÀ¸·Î ·çÇÁ¸¦ ¸ÕÀú µ¹¸ç º¸ÀÌ´Â ÆÄÆ®¸¦ ã¾Æ ÆøÀ» ÇÒ´çÇØ¾ß Çϴµ¥ º¸ÀÌ´Â ÆÄÆ®¸¦ ¸ÕÀú ã°í ÀÌ ÆÄÆ®ÀÇ ¼ø¼­°ªÀ» Á¶»çÇ߱⠶§¹®¿¡ ¾û¶×ÇÑ °á°ú°¡ ³ª¿Â °ÍÀÌ´Ù. ÀÌÀü ÄÚµå¿Í ºñ±³ÇØ º¸¸é ¾îµð°¡ À߸øµÇ¾ú´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖ´Ù. ¿ª½Ã ¼÷·ÃÀÚ¿¡°Ôµµ ·çÇÁ¶õ ½±Áö ¾ÊÀ¸¸ç ½Ç¼öÀÇ ¿©Áö°¡ ¸¹´Ù.

ÆíÁý ¿©ºÎ À̹ÌÁö °ü¸®

ÆÄÀÏÀ» ÆíÁýÇϸé ÆÄÀÏÅÇÀÇ À̹ÌÁö »ö»óÀÌ º¯°æµÇ¸ç »óŶõÀÇ ÆíÁý¿©ºÎ ÆÄÆ®µµ º¯°æµÈ´Ù. º¯°æ½ÃÁ¡ÀÌ ¿ÏÀüÈ÷ µ¿ÀÏÇϱ⠶§¹®¿¡ ÆÄÀÏÅÇÀÇ À̹ÌÁö¸¦ »óŶõ °ü¸® ·çƾ¿¡¼­ ÇÔ²² ó¸®Çß´Ù. ¹®Á¦´Â ÆíÁý¿©ºÎ ÆÄÆ®¸¦ ¼û±æ¼öµµ ÀÖ´Ù´Â Á¡Àε¥ ÀÌ ÆÄÆ®°¡ ¼û°ÜÁö¸é ÆÄÀÏÅǵµ °ü¸®µÇÁö ¾Ê´Â´Ù. ÆÄÀÏÅÇÀº ÆÄÆ®ÀÇ º¸À̱⠻óÅÂ¿Í »ó°ü¾øÀÌ µû·Î ó¸®ÇØ¾ß ÇÑ´Ù.

 

void SetStatusText(int mask,LPCTSTR Mes/*=NULL*/)

{

     ....

     // ÆÄÀÏÅÇÀÇ À̹ÌÁö´Â ¹®¼­ ÆíÁý ¿©ºÎ »óŶõÀÇ º¸À̱â¿Í´Â »ó°ü¾øÀÌ Ã³¸®ÇÑ´Ù.

     if (mask & (1 << 2+1)) {

          tie.mask=TCIF_IMAGE;

          tie.iImage=pSi->Ae.GetModified();

          idx=FindFileTab(pSi->NowFile);

          if (idx!=-1) {

              TabCtrl_SetItem(hFileTab,idx,&tie);

          }

     }

 

     // 0¹ø »óŶõ. stidx=Á¤º¸ ¹øÈ£, bitmask=mask¿¡¼­ ÇØ´ç »óÅÂÀÇ À§Ä¡

     for (stidx=0;stidx<STNUM;stidx++) {

          if (!(mask & (1 << (stidx+1)) && Option.StMask[stidx].bShow)) {

              continue;

          }

          switch (stidx) {

          ....

          case 2:

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

                   lstrcpy(Text,"ÆíÁýµÇ¾úÀ½");

              } else {

                   lstrcpy(Text,"¹ÌÆíÁý");

              }

              break;

          case 3:

          ....

 

½ÃÁ¡Àº ¾ÆÁ÷µµ ÀÏÄ¡ÇϹǷΠSetStatusText ÇÔ¼ö¿¡¼­ ÆÄÀÏÅÇÀÇ À̹ÌÁö¸¦ °ü¸®Ç쵂 ÆÄÆ®ÀÇ º¸À̱⠻óŸ¦ Á¡°ËÇϱâ Àü¿¡ 2¹ø ÆÄÆ®¸¦ °»½ÅÇ϶ó´Â ½ÅÈ£°¡ ¿ÔÀ¸¸é ÆÄÀÏÅÇÀÇ À̹ÌÁö¸¦ º¯°æÇÑ´Ù. ÀÌÁ¦ ÆíÁý¿©ºÎ ÆÄÆ®¸¦ ¼û°Üµµ ÆÄÀÏÅÇÀÌ Àß °ü¸®µÉ °ÍÀÌ´Ù.

Ž»ö±â Æ˾÷ ¸Þ´º ¹ö±×

ÀÌ ¹ö±×´Â Á¶±Ý Ȳ´çÇÑ ¸éÀÌ Àִµ¥ °³¹ßÁß¿¡ Ž»ö±âÀÇ Æ˾÷ ¸Þ´º°¡ Á¾Á¾ »ç¶óÁö´Â °ÍÀ» ¸ñ°ÝÇÒ ¼ö ÀÖ¾ú´Ù. ¿É¼Ç °ü¸® ·çƾÀ» ÁýÁßÀûÀ¸·Î Á¡°ËÇØ º¸¾Æµµ º°´Ù¸¥ ÀÌ»óÀ» ¹ß°ßÇÏÁö ¸øÇߴµ¥ ¿øÀÎÀº ¾û¶×ÇÑ °÷¿¡ ÀÖ´Ù. ´ç±ÙÀº ¼³Ä¡ÇÒ ¶§ DgCmd.dllÀ» ½Ã½ºÅÛ µð·ºÅ丮·Î º¹»çÇÏ°í ÀÌ DLLÀÇ Å½»ö±â¿¡ µî·ÏÇÑ´Ù.

¼³Ä¡ÇØÁ¦ÇÒ ¶§´Â ¹Ý´ë·Î ÀÌ ÆÄÀÏÀ» »èÁ¦ÇØ¾ß Çϴµ¥ Ž»ö±â°¡ ÀÌ ÆÄÀÏÀ» »ç¿ëÇÏ°í ÀÖÀ¸¹Ç·Î ´çÀå »èÁ¦ÇÒ ¼ö´Â ¾ø´Ù. ±×·¡¼­ ´ÙÀ½ ºÎÆÃÇÒ ¶§ »èÁ¦Çϵµ·Ï µî·Ï¸¸ ÇØ ³õÀ¸¸ç ÀÌ °úÁ¤À» Á¤»óÀûÀ¸·Î ¹âÀ¸¸é ¼³Ä¡ ÇØÁ¦µµ Àß µÈ´Ù. ¹®Á¦´Â ¼³Ä¡ ÇØÁ¦ ÈÄ ÀçºÎÆþøÀÌ ´Ù½Ã ¼³Ä¡ÇÒ ¶§Àε¥ À̶§´Â DgCmd.dllÀÌ ½Ã½ºÅÛ µð·ºÅ丮¿¡ ÀÌ¹Ì ÀÖ´õ¶óµµ ´ÙÀ½ ºÎÆÃÇÒ ¶§ »èÁ¦µÇ¾î ¹ö¸°´Ù. Áï, ¼³Ä¡ ÇØÁ¦¿¡ ÀÇÇØ DgCmd.dllÀÌ ´ÙÀ½ ºÎÆö§ »èÁ¦µÇ´Â °ÍÀÌ´Ù.

ÃÖÁ¾ »ç¿ëÀÚµéÀº ÀÌ·± Áõ»óÀ» °æÇèÇÒ ±âȸ°¡ »ç½Ç °ÅÀÇ ¾øÀ» °ÍÀÌ´Ù. ±×·¯³ª °³¹ßÁß¿¡ ¿É¼Ç ¸ñ·ÏÀÌ ¼ö½Ã·Î ¹Ù²ð ¶§´Â ÇØÁ¦ ÈÄ À缳ġ¸¦ Á¾Á¾ ÇØ¾ß ÇϹǷΠÀÌ·± Áõ»óÀ» ½±°Ô ¸ñ°ÝÇÒ ¼ö ÀÖ´Ù. ¼³Ä¡ÇÒ ¶§ °°Àº ¼¼¼Ç¿¡¼­ ¼³Ä¡ ÇØÁ¦µÈ ÀûÀÌ ÀÖÀ¸¸é DgCmd.dllÀÇ »èÁ¦¸¦ Ãë¼ÒÇØ¾ß ÇÑ´Ù. Æ˾÷ ¸Þ´º µî·Ï ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void RegisterPopup(BOOL bReg,BOOL bDelete/*=FALSE*/)

{

    TCHAR Pending[1024],*p;

     ....

    osv.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);

    GetVersionEx(&osv);

     if (bReg) {

     if (bReg) {

          // DLL ÆÄÀÏÀÌ ¾øÀ¸¸é ¸®¼Ò½º¿¡¼­ ÃßÃâÇؼ­ ¸¸µç´Ù.

          if (_access(DllPath,0) != 0) {

              hRSrc=FindResource(g_hInst,MAKEINTRESOURCE(IDR_DLL1),"DLL");

              Size=SizeofResource(g_hInst,hRSrc);

              hMem=LoadResource(g_hInst,hRSrc);

              ptr=LockResource(hMem);

              hFile=CreateFile(DllPath,GENERIC_WRITE,0,NULL,

                   CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

              WriteFile(hFile,ptr,Size,&dwWritten,NULL);

              CloseHandle(hFile);

          }

        // Ãë¼Ò ÈÄ À缳ġµÉ ¶§ »èÁ¦ µî·ÏµÈ Á¤º¸¸¦ Ãë¼ÒÇÑ´Ù.

        if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT) {

           SHRegReadString(SHLM,"SYSTEM\\CurrentControlSet\\Control\\Session Manager",

               "PendingFileRenameOperations","",Pending,1024);

           p=strstr(Pending,"DgCmd.dll");

           if (p) {

               memcpy(p,"zzzzz.zzz",9);

           }

           SHRegWriteString(SHLM,"SYSTEM\\CurrentControlSet\\Control\\Session Manager",

               "PendingFileRenameOperations",Pending);

        } else {

           WritePrivateProfileString("rename","NUL",NULL,"Wininit.ini");

        }

 

          RegisterSvr(DllPath,TRUE);

     } else {

     ....

 

»ç¿ëÁßÀÎ ÆÄÀÏÀ» »èÁ¦ÇÏ´Â ¹æ¹ýÀÌ 9x °è¿­°ú NT °è¿­¿¡¼­ Ʋ¸®¹Ç·Î »èÁ¦¸¦ Ãë¼ÒÇÏ´Â ¹æ¹ýµµ Ʋ¸®´Ù. ±×·¡¼­ ¹öÀü Á¶»ç Äڵ带 ÇÔ¼ö ¾ÕÂÊÀ¸·Î À̵¿ÇÏ°í ¼³Ä¡ÇÒ ¶§ ·¹Áö½ºÆ®¸®¿¡ »èÁ¦ µî·ÏµÈ DgCmd.dllÀÌ ÀÖÀ¸¸é ÀÌ °ªÀ» »èÁ¦ÇÑ´Ù. »èÁ¦ µî·ÏµÈ ÆÄÀÏÀÌ DgCmd.dll»Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ µî·ÏÇØ ³õÀº ÆÄÀϵµ ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î ·¹Áö½ºÆ®¸® Å°¸¦ ¹«Á¶°Ç »èÁ¦Çؼ­´Â ¾ÈµÇ¸ç DgCmd.dll¸¸ »èÁ¦ÇØ¾ß ÇÑ´Ù.

·¹Áö½ºÆ®¸® °ªÀ» ÀüºÎ Àоî DgCmd.dllÀ» »èÁ¦ÇÏ°í ´Ù½Ã ±â·ÏÇÏ¸é µÇ°ÚÀ¸³ª ÀÌ Å°´Â ¿©·¯ °³ÀÇ ¹®ÀÚ¿­ÀÌ °³Çà ÄÚµå·Î ±¸ºÐµÇ¾î À־ ±×´ÙÁö °£´ÜÇÏÁö°¡ ¾Ê´Ù. ¿©±â¼­´Â Á» ´õ °£´ÜÇÑ ¹æ¹ýÀ» »ç¿ëÇß´Ù. DgCmd.dllÀ» zzzzz.zzz¶ó´Â À̸§À¸·Î ¹Ù²ã ¹ö¸®¸é »èÁ¦¿¡ ½ÇÆÐÇϹǷΠ¾Æ¹« Àϵµ ÀϾÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÏÁ¾ÀÇ ²Ç¼ö¶ó°í ÇÒ ¼ö Àִµ¥ º° ¸»½éÀº ¾ø´Ù.

³ª.ÄÁÆ®·ÑÀÇ µ¶¸³¼º °³¼±

´ç±ÙÀÇ ÁÖ ¿£ÁøÀÎ ApiEdit´Â óÀ½ºÎÅÍ ÄÁÆ®·Ñ·Î µðÀÚÀÎµÇ¾î ´Ù¸¥ ÇÁ·ÎÁ§Æ®¿¡ Àç»ç¿ëÇÒ ¼ö ÀÖµµ·Ï °ü¸®ÇØ ¿Ô´Ù. ±×·±µ¥ ¸·»ó ¸±¸®ÁîÇÑ ÈÄ ´Ù¸¥ ÇÁ·ÎÁ§Æ®¿¡ »ç¿ëÇØ º¸´Ï ºÒÆíÇÑ Á¡µµ ÀÖ°í ¹®Á¦Á¡µµ ÀÖ¾î Á» ´õ µ¶¸³¼ºÀ» ³ôÀÏ ÇÊ¿ä°¡ ÀÖ´Ù.

Ä¿½ºÅÒ Ä¿¼­ »ý¼º

´ç±ÙÀº ¼¼ °³ÀÇ Ä¿¼­ ¸®¼Ò½º¸¦ »ç¿ëÇÑ´Ù. ÄÁÆ®·ÑÀÌ ¸®¼Ò½º¸¦ °¡Áú ¼ö´Â ¾øÀ¸¹Ç·Î È£½ºÆ®·ÎºÎÅÍ ÀÌ ¸®¼Ò½ºµéÀ» ¹Þ¾Æ¼­ »ç¿ëÇØ¾ß ÇÑ´Ù. ¹°·Ð ±â´É»óÀÇ ¹®Á¦´Â ¾øÁö¸¸ È£½ºÆ® Á¦ÀÛÀÚ°¡ ´ç±ÙÀÇ ¼Ò½º·ÎºÎÅÍ ¸®¼Ò½º ¼¼ °³¸¦ º¹»çÇÏ°í RC ÆÄÀÏÀ» Á÷Á¢ ¿­¾î ÀÌ ¸®¼Ò½º¸¦ Ãß°¡ÇØ¾ß ÇÑ´Ù´Â Á¡Àº ÀçÈ°¿ëÀÇ Å« ¹®Á¦Á¡ÀÌ´Ù. È£½ºÆ®´Â ¾Æ¹«·± Ãß°¡ ÀÛ¾÷¾øÀÌ ÄÁÆ®·ÑÀ» ¾µ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

±×·¸´Ù°í Çؼ­ Ä¿¼­¸¦ ¾²Áö ¾ÊÀ» ¼ö´Â ¾øÀ¸¹Ç·Î ÄÁÆ®·ÑÀÌ Ä¿¼­¸¦ Á÷Á¢ ¸¸µé¾î¼­ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾²±â·Î ÇÑ´Ù. ApiEditÀÇ ¸®¼Ò½º¸¦ ·ÎµåÇÏ´Â LoadAeResource ÇÔ¼ö¿¡¼­ Ä¿¼­¸¦ ¾Æ¿¹ ¸¸µé¾î ¾²µµ·Ï ¼öÁ¤ÇÏÀÚ. À̹ÌÁö ÇüÅÂÀÇ Ä¿¼­¸¦ Á¤ÀÇÇÏ·Á¸é ´ë·®ÀÇ µ¥ÀÌÅ͵éÀÌ ÇÊ¿äÇÏ´Ù.

 

void CApiEdit::LoadAeResource()

{

     static BYTE CopyAnd[]={

          0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XFF, 0X8F,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,

          0X83,0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFF, 0X80,0XFF,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,

          0X80,0X3F,0XFF,0XFF,0X80,0X1F,0XFF,0XFF, 0X80,0X0F,0XFF,0XFF,0X80,0XFF,0XFF,0XFF,

          0X88,0X7F,0XFF,0XFF,0X98,0X7F,0XFF,0XFF, 0XBC,0X3F,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,

          0XFE,0X1F,0XFF,0XFF,0XF0,0X01,0X00,0X7F, 0XF0,0X01,0X00,0X7F,0XF3,0XD9,0X00,0X7F,

          0XF3,0XF9,0X00,0X7F,0XF3,0XF9,0X00,0X7F, 0XF3,0XF9,0X00,0X7F,0XF0,0X01,0X00,0X7F,

          0XF0,0X01,0X00,0X7F,0XFF,0XFF,0X00,0X7F, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

          0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

     };

     static BYTE CopyXor[]={

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X20,0X00,0X00,0X00,0X30,0X00,0X00,0X00,

          0X38,0X00,0X00,0X00,0X3C,0X00,0X00,0X00, 0X3E,0X00,0X00,0X00,0X3F,0X00,0X00,0X00,

          0X3F,0X80,0X00,0X00,0X3F,0XC0,0X00,0X00, 0X3E,0X00,0X00,0X00,0X36,0X00,0X00,0X00,

          0X23,0X00,0X00,0X00,0X03,0X00,0X00,0X00, 0X01,0X80,0X00,0X00,0X01,0X80,0X00,0X00,

          0X00,0XC0,0X00,0X00,0X04,0XD4,0X00,0X00, 0X0A,0X2A,0X7F,0X00,0X04,0X04,0X77,0X00,

          0X08,0X02,0X77,0X00,0X04,0X04,0X41,0X00, 0X08,0X02,0X77,0X00,0X05,0X54,0X77,0X00,

          0X0A,0XAA,0X7F,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

     };

     static BYTE MoveAnd[]={

          0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XFF, 0X8F,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,

          0X83,0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFF, 0X80,0XFF,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,

          0X80,0X3F,0XFF,0XFF,0X80,0X1F,0XFF,0XFF, 0X80,0X0F,0XFF,0XFF,0X80,0XFF,0XFF,0XFF,

          0X88,0X7F,0XFF,0XFF,0X98,0X7F,0XFF,0XFF, 0XBC,0X3F,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,

          0XFE,0X1F,0XFF,0XFF,0XF0,0X01,0XFF,0XFF, 0XF0,0X01,0XFF,0XFF,0XF3,0XD9,0XFF,0XFF,

          0XF3,0XF9,0XFF,0XFF,0XF3,0XF9,0XFF,0XFF, 0XF3,0XF9,0XFF,0XFF,0XF0,0X01,0XFF,0XFF,

          0XF0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

          0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

     };

     static BYTE MoveXor[]={

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X20,0X00,0X00,0X00,0X30,0X00,0X00,0X00,

          0X38,0X00,0X00,0X00,0X3C,0X00,0X00,0X00, 0X3E,0X00,0X00,0X00,0X3F,0X00,0X00,0X00,

          0X3F,0X80,0X00,0X00,0X3F,0XC0,0X00,0X00, 0X3E,0X00,0X00,0X00,0X36,0X00,0X00,0X00,

          0X23,0X00,0X00,0X00,0X03,0X00,0X00,0X00, 0X01,0X80,0X00,0X00,0X01,0X80,0X00,0X00,

          0X00,0XC0,0X00,0X00,0X04,0XD4,0X00,0X00, 0X0A,0X2A,0X00,0X00,0X04,0X04,0X00,0X00,

          0X08,0X02,0X00,0X00,0X04,0X04,0X00,0X00, 0X08,0X02,0X00,0X00,0X05,0X54,0X00,0X00,

          0X0A,0XAA,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

     };

     static BYTE MarginAnd[]={

          0XFF,0XFF,0X7F,0XFF,0XFF,0XFF,0X3F,0XFF, 0XFF,0XFF,0X1F,0XFF,0XFF,0X00,0X0F,0XFF,

          0XFF,0X00,0X07,0XFF,0XFF,0X00,0X03,0XFF, 0XFF,0X00,0X07,0XFF,0XFF,0X00,0X0F,0XFF,

          0XFF,0XFF,0X1F,0XFF,0XFF,0XFF,0X3F,0XFF, 0XFF,0XFF,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,

          0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

          0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

          0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

          0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

          0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,

     };

     static BYTE MarginXor[]={

          0X00,0X00,0X80,0X00,0X00,0X00,0XC0,0X00, 0X00,0X00,0XA0,0X00,0X00,0XFF,0X90,0X00,

          0X00,0X80,0X08,0X00,0X00,0X80,0X04,0X00, 0X00,0X80,0X08,0X00,0X00,0XFF,0X90,0X00,

          0X00,0X00,0XA0,0X00,0X00,0X00,0XC0,0X00, 0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

     };

 

     hCSel=LoadCursor(NULL,IDC_ARROW);

     hCNoDrop=LoadCursor(NULL,IDC_NO);

     hCCopy=CreateCursor(g_hInst,1,1,32,32,CopyAnd,CopyXor);

     hCMove=CreateCursor(g_hInst,1,1,32,32,MoveAnd,MoveXor);

     hCMargin=CreateCursor(g_hInst,21,5,32,32,MarginAnd,MarginXor);

 

     hLineNumFont=CreateFont(12,0,0,0,0,0,0,0,HANGEUL_CHARSET,3,2,1,

          VARIABLE_PITCH | FF_MODERN,"±¼¸²");

}

 

void CApiEdit::UnLoadAeResource()

{

     DestroyCursor(hCCopy);

     DestroyCursor(hCMove);

     DestroyCursor(hCMargin);

     DeleteObject(hLineNumFont);

}

 

Ä¿¼­´Â CreateCursor ÇÔ¼ö·Î »ý¼ºÇϴµ¥ AND ¸¶½ºÅ©¿Í XOR ¸¶½ºÅ©¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. ¸ð´« Á¾ÀÌ¿¡ ¿øÇÏ´Â ±×¸²À» ±×¸° ÈÄ AND ¸¶½ºÅ©´Â Åõ¸í ºÎºÐ¸¸ 1·Î Æò°¡ÇÏ°í XOR ¸¶½ºÅ©´Â Èò»ö¸¸ 1·Î Æò°¡ÇÏ¿© 2Áø¼ö¸¦ ÃßÃâÇÑ ÈÄ 16Áø¼ö·Î ´Ù½Ã ¹Ù²Ù¸é µÈ´Ù. ÀÌ·± ÀÛ¾÷Àº ¾î¼Àºí¸® ÄÚµùÀ» ÇØ º» °æÇèÀ» ÇÊ¿ä·Î ÇϹǷΠ»ç½Ç ¹«Ã´ »ý¼ÒÇÒ °ÍÀÌ´Ù. ÀÌ·¸°Ô µÎ °³ÀÇ ¹è¿­À» Á¤ÀÇÇÑ ÈÄ CreateCursor ÇÔ¼ö¸¦ È£ÃâÇϸé Ä¿¼­ ÇÚµéÀÌ ¸®ÅϵȴÙ. ÀÌ·¸°Ô ¸¸µç Ä¿¼­´Â DestroyCursor ÇÔ¼ö·Î Á÷Á¢ »èÁ¦ÇØ¾ß ÇÑ´Ù.

¸®¼Ò½º ÆíÁý±â¿¡¼­ Æí¸®ÇÏ°Ô ¸¸µé ¼ö ÀÖ´Â Ä¿¼­¸¦ ¿Ö ÀÌ·¸°Ô º¹ÀâÇÑ ¹æ¹ýÀ¸·Î ¸¸µé±î ½ÍÁö¸¸ ¿î¿µÃ¼Á¦°¡ Á¦°øÇÏ´Â API ÇÔ¼öµéÀ» ´Ù ¿ä±äÇÏ°Ô »ç¿ëÇÒ °÷ÀÌ ÀÖ´Ù. ÄÁÆ®·ÑÀÌ Á÷Á¢ Ä¿¼­¸¦ ¸¸µé¾î¼­ »ç¿ëÇϹǷΠȣ½ºÆ®´Â ºÎ´ãÀ» ÁöÁö ¾Ê¾Æµµ µÈ´Ù. ÀÌÁ¦ ¼¼ °³ÀÇ Ä¿¼­ ¸®¼Ò½º´Â ºÒÇÊ¿äÇϹǷΠÁ¦°ÅÇÑ´Ù. ÀÌ¿Õ ¸®¼Ò½º¿¡ ¼Õ ´í±è¿¡ ¾×¼¿·¯·¹ÀÌÅÍ Å×ÀÌºíµµ Á¦°ÅÇØ ¹ö¸°´Ù. ´ç±ÙÀº º°µµÀÇ ´ÜÃàÅ° ¾Ë°í¸®ÁòÀ» »ç¿ëÇϹǷΠ¾×¼¿·¯·¹ÀÌÅÍ°¡ ÇÊ¿äÄ¡ ¾Ê´Ù.

ºÐ¼®±âÀÇ ¿É¼Ç ¼³Á¤

¿©±â±îÁö ÀÛ¾÷µÈ »óÅ¿¡¼­ ApiEdit¸¦ ´Ù¸¥ ÇÁ·ÎÁ§Æ®·Î °¡Á®°¡ º¸¸é ¿¡·¯°¡ Çϳª ¹ß»ýÇÑ´Ù. ¿É¼ÇÀ» °ü¸®ÇÏ´Â ÁÖü°¡ È£½ºÆ®À̹ǷΠȣ½ºÆ®°¡ ºÐ¼®±âÀÇ »ö»ó ¿É¼ÇÀ» ¼³Á¤Çϴµ¥ È£½ºÆ®°¡ ¹Ù²î¸é ÀÌ °úÁ¤ÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. ÆÄÀÏÀ» ¿­ ¶§ OpenFileToChild ÇÔ¼ö¿¡¼­ SelectParser ÇÔ¼ö¸¦ È£ÃâÇÏ¸ç ºä¸¦ ºÐÇÒÇÒ ¶§µµ ¿É¼ÇÀ» ¼³Á¤ÇØ¾ß Çϴµ¥ CloneView¿¡¼­ ¼öÇàÇÏ°í ÀÖ´Ù.

 

// ºä¸¦ º¹Á¦ÇÑ´Ù.

void CApiEdit::CloneView(CApiEditText *pDest, CApiEditText *pSrc,int SplitType)

{

     ....

     // ºÐ¼®±â ÁöÁ¤

     pDest->SetParser((int)pSrc->GetParser()->GetInfo(0));

    Option.SetStyleColor(pDest->GetParser());

    SendMessage(GetParent(hWnd),UserBase+6,0,(LPARAM)pDest->GetParser());

 

ÀÌ ÇÔ¼ö¿¡¼­ Option °´Ã¼ÀÇ SetStyleColor ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ºÐ¼®±âÀÇ ¿É¼ÇÀ» ¼³Á¤Çϴµ¥ Àß º¸¸é ¸»µµ ¾ÈµÇ´Â ¼Ò¸®´Ù. ApiEdit ÄÁÆ®·ÑÀÌ Option °´Ã¼¸¦ ¾î¶»°Ô ¾Æ´Â°¡? ¸ðµç È£½ºÆ®°¡ ÀÌ·± ¿É¼ÇÀ» À¯ÁöÇÑ´Ù´Â º¸ÀåÀÌ ¾øÀ¸¹Ç·Î È£½ºÆ®¿¡°Ô ¸Þ½ÃÁö·Î ¿äûÇØ¾ß ÇÑ´Ù. lParamÀ¸·Î ºÐ¼®±â °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ½Ç¾î UserBase+6¹ø ¸Þ½ÃÁö¸¦ º¸³Â´Ù.

 

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

{

     ....

     if (pSi && iMessage > WM_USER) {

     ....

          // lParamÀ¸·Î Àü´ÞµÈ ºÐ¼®±âÀÇ ¼³Á¤À» º¯°æÇ϶ó.

          if (iMessage == pSi->Ae.GetUserBase()+6) {

              Option.SetStyleColor((CParse *)lParam);

              return 0;

          }

     }

 

È£½ºÆ®´Â ÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ÀÚ½ÅÀÌ À¯ÁöÇÏ°í ÀÖ´Â ¿É¼Ç Á¤º¸´ë·Î ºÐ¼®±âÀÇ »ö»óÀ» º¯°æÇÏ¸é µÈ´Ù. ¸¸¾à È£½ºÆ®°¡ ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇÏÁö ¾Ê´õ¶óµµ ApiEdit´Â µðÆúÆ® ¼³Á¤´ë·Î ±¸¹® ºÐ¼®À» ÇÒ ¼ö ÀÖ´Ù. ¿©±â±îÁö ÀÛ¾÷Çϸé ApiEdit´Â Àç»ç¿ë¼ºÀÌ ÈξÀ ´õ ³ô¾ÆÁö¸ç ÆÄÀϸ¸ º¹»çÇؼ­ ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔÇÏ¸é ½±°Ô Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù.

´Ù.½ºÅ¸ÀÏ ÅëÇÕ

ApiEdit ÄÁÆ®·ÑÀº »ç¿ëÀÚ°¡ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ¿É¼ÇµéÀÌ ¾ÆÁÖ ¸¹´Ù. ±×¸¸Å­ dzºÎÇÑ Ä¿½ºÅÒÈ­¸¦ Áö¿øÇÑ´Ù´Â ¶æÀÌ¸ç ´Ù¾çÇÑ È¯°æ¿¡ µÎ·ç »ç¿ëµÉ ¼ö ÀÖ¾î È°¿ë¼ºµµ ³ô´Ù. ±×·¯³ª ¿É¼ÇÀ» °ü¸®Çϱâ À§ÇÑ ÇÔ¼öµéµµ ³Ê¹« ¸¹¾Æ °ø°³µÈ ÀÎÅÍÆäÀ̽º°¡ ¸¹Àº °ÍÀº ¶Ç ´Ù¸¥ ´ÜÁ¡À̶ó°í ÇÒ ¼ö ÀÖ´Ù. °³º° º¯¼ö·Î µÇ¾î ÀÖ´Â ¿É¼ÇµéÀ» ºñÆ® ÇʵåÀÇ ½ºÅ¸ÀÏ·Î ¹Ù²ã º¸ÀÚ.

°³º° º¯¼ö´Â °³´ç 4¹ÙÀÌÆ®¾¿À» Â÷ÁöÇϴµ¥ ºñÇØ ºñÆ® Çʵå·Î µÈ ½ºÅ¸ÀÏÀº ´Ü 1ºñÆ®¸¸ »ç¿ëÇϹǷΠ¿ë·®¿¡ À¯¸®ÇÏ´Ù. °³º° º¯¼ö´Â ¿ë·®µµ ¸¹ÀÌ Â÷ÁöÇÒ »Ó¸¸ ¾Æ´Ï¶ó ÀÏÀÏÀÌ Get/Set ÇÔ¼ö¸¦ Á¦°øÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ ºÒ¸®ÇÏ¸ç ·¹Áö½ºÆ®¸® ÀÔÃâ·Âµµ °³º°ÀûÀ¸·Î ÇØ¾ß ÇÑ´Ù. ½ºÅ¸ÀÏÀº ÅëÇÕ ¾×¼¼½º ÇÔ¼ö¸¦ Á¦°øÇÒ ¼ö ÀÖ°í ·¹Áö½ºÆ®¸® ÀÔÃâ·Âµµ ¾ÆÁÖ °£ÆíÇÏ´Ù. ApiEdit¿¡¼­ ºñÆ® Çʵå·Î ¸¸µé¸¸ÇÑ ½ºÅ¸ÀÏÀº ¾ÆÁÖ ¸¹´Ù. ÀÏ´Ü ´ÙÀ½ ½ºÅ¸ÀϵéÀ» ApiEdit.h¿¡ Á¤ÀÇÇÑ´Ù.

 

// ÄÁÆ®·ÑÀÇ ½ºÅ¸ÀÏ

#define AES_WANTTAB                        0x00000001

#define AES_USELINEEND                   0x00000002

#define AES_ALLOWDRAG               0x00000004

#define AES_SPACEFORTAB                0x00000008

#define AES_AUTOINDENT                   0x00000010

#define AES_BLOCKINDENTWITHTAB        0x00000020

#define AES_HOMETOFIRSTCHAR             0x00000040

#define AES_HIDECURLINE                   0x00000080

#define AES_CALCTABWITHAVG           0x00000100

#define AES_HORZSPLITABLE              0x00000200

#define AES_VERTSPLITABLE              0x00000400

#define AES_AUTOCONVERT               0x00000800

#define AES_FIXEDCOLUMN                 0x00001000

#define AES_NOWRAPCOLUMN            0x00002000

#define AES_USEAUTOCLIP                 0x00004000

#define AES_AUTOCLIPBYTAB             0x00008000

#define AES_SHOWMARGIN                  0x00010000

#define AES_SHOWENTER                   0x00020000

#define AES_SHOWTAB                        0x00040000

#define AES_SHOWSPACE                   0x00080000

#define AES_SHOWLINENUM                0x00100000

#define AES_SHOWRULER               0x00200000

#define AES_SWAPDRAGBUTTON              0x00400000

#define AES_SMARTSPACE                 0x00800000

#define AES_NOFIRSTSPACE          0x01000000

 

BOOLÇüÀÇ ¿É¼Ç º¯¼öµéÀÌ ¸ðµÎ ½ºÅ¸ÀÏ·Î ÀüȯµÇ¾ú´Ù. Á¤¼öÇü ¿É¼Çµµ ÇÕÄ¥ ¼ö ÀÖÁö¸¸ ¸¶½ºÅ©¸¦ °ü¸®ÇØ¾ß ÇϹǷΠBOOLÇüº¸´Ù´Â ÈξÀ ´õ ¹ø°Å·Ó´Ù. ½ºÅ¸ÀÏÀ» ÀúÀåÇÏ´Â º¯¼ö¿Í ÀÐ°í ¾²´Â ÇÔ¼ö 4°³¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.

 

class CApiEdit : public CWindow

{

     ....

     DWORD Style;

     ....

     DWORD GetStyle() { return Style; }

     void SetStyle(DWORD aStyle);

     BOOL TestStyle(DWORD aStyle) { return (Style & aStyle) != 0; }

     void ChangeStyle(DWORD aStyle, BOOL bCheck) {

          if (bCheck) SetStyle(Style | aStyle); else SetStyle(Style & ~aStyle);

     }

 

StyleÀÌ DWORDÇüÀ̹ǷΠÃÖ´ë 32°³ÀÇ ½ºÅ¸ÀÏÀ» ÇϳªÀÇ º¯¼ö¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ¾×¼¼½º ÇÔ¼öµéÀº ½ºÅ¸ÀÏ Àüü¸¦ ÀÐ°í ¾²´Â ÇÔ¼ö¿Í °³º° ºñÆ®¸¦ ÀÐ°í ¾²´Â ÇÔ¼ö µÎ °³°¡ Á¦°øµÈ´Ù. SetStyle ÇÔ¼ö´Â ½ºÅ¸ÀÏ º¯°æ¿¡ ´ëÇÑ ºÎ°¡ 󸮱îÁö ÇØ¾ß ÇϹǷΠ±æÀÌ°¡ Á¶±Ý ±æ´Ù.

 

// º¯°æµÈ ½ºÅ¸ÀÏ¿¡ ´ëÇÑ È¿°ú¸¦ Àû¿ëÇÑ´Ù.

void CApiEdit::SetStyle(DWORD aStyle)

{

     DWORD Old=Style;

 

     Style=aStyle;

 

     if ((Old & AES_HIDECURLINE) != (Style & AES_HIDECURLINE)) {

          ForAllView(Invalidate(-1))

     }

     if ((Old & AES_CALCTABWITHAVG) != (Style & AES_CALCTABWITHAVG)) {

          ForAllView(SetTabWidth(arView[aet]->GetTabWidth()))

     }

     // ºÐÇÒ °¡´É¼º º¯°æÀº ºÐÇÒµÈ »óÅ¿¡¼­´Â Á¶Á¤ÇÒ ¼ö ¾ø´Ù.

     if (arView[1]==NULL && (Old & AES_HORZSPLITABLE) != (Style & AES_HORZSPLITABLE)) {

          AdjustSplitable();

     }

     if (arView[1]==NULL && (Old & AES_VERTSPLITABLE) != (Style & AES_VERTSPLITABLE)) {

          AdjustSplitable();

     }

 

     if ((Old & AES_SHOWMARGIN) != (Style & AES_SHOWMARGIN)) {

          for (int aet=0;aet<4 && arView[aet];aet++) {

              arView[aet]->MarginWidth=(Style & AES_SHOWMARGIN) ? 25:0;

               arView[aet]->Invalidate(-1);

              SendMessage(arView[aet]->hWnd,WM_SIZE,SIZE_RESTORED,(LPARAM)0);

          }

     }

     if ((Old & AES_SHOWENTER) != (Style & AES_SHOWENTER)) {

          ForAllView(Invalidate(-1))

     }

     if ((Old & AES_SHOWTAB) != (Style & AES_SHOWTAB)) {

          ForAllView(Invalidate(-1))

     }

     if ((Old & AES_SHOWSPACE) != (Style & AES_SHOWSPACE)) {

          ForAllView(Invalidate(-1))

     }

     if ((Old & AES_SHOWLINENUM) != (Style & AES_SHOWLINENUM)) {

          ForAllView(Invalidate(-1))

     }

     if ((Old & AES_SHOWRULER) != (Style & AES_SHOWRULER)) {

          for (int aet=0;aet<4 && arView[aet];aet++) {

              arView[aet]->Invalidate(-1);

              SendMessage(arView[aet]->hWnd,WM_SIZE,SIZE_RESTORED,(LPARAM)0);

          }

     }

     if ((Old & AES_NOFIRSTSPACE) != (Style & AES_NOFIRSTSPACE)) {

          for (int aet=0;aet<4 && arView[aet];aet++) {

              arView[aet]->UpdateLineInfo();

              arView[aet]->UpdateScrollInfo();

              arView[aet]->SetCaret();

              arView[aet]->Invalidate(-1);

          }

     }

}

 

½ºÅ¸ÀÏ ºñÆ®¸¦ Á¡°ËÇÏ¿© º¯°æµÈ ½ºÅ¸ÀÏ¿¡ ´ëÇؼ­´Â ºÎ°¡ÀûÀΠ󸮸¦ ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î Á¦¾î ÄÚµå º¸À̱⠽ºÅ¸ÀÏÀÌ º¯°æµÇ¾ú¸é ¸ðµç ºä¸¦ ´Ù½Ã ±×·Á¾ß ÇÏ°í Á¤·Ä °ü·Ã ½ºÅ¸ÀÏÀÌ º¯°æµÇ¾úÀ¸¸é Á¤·Äµµ ´Ù½Ã ÇØ¾ß ÇÑ´Ù.

°³º° º¯¼ö·Î µÇ¾î ÀÖ´ø ¿É¼ÇµéÀÌ ½ºÅ¸ÀÏ·Î ¹Ù²î¾úÀ¸¹Ç·Î Àüü ¼Ò½º¿¡¼­ ÀÌ º¯¼öµéÀ» Á¦°ÅÇÏ°í ½ºÅ¸ÀÏÀ» ÂüÁ¶Çϵµ·Ï º¯°æÇØ¾ß ÇÑ´Ù. ¾ÆÁÖ ´ë·®ÀÇ ¼Ò½º ÆíÁý ÀÛ¾÷ÀÌ ÇÊ¿äÇѵ¥ ´ëÇ¥ÀûÀ¸·Î bAllowDrag ¿É¼ÇÀ» ½ºÅ¸ÀÏ·Î º¯°æÇÏ´Â ÀýÂ÷¸¦ º¸ÀÚ. ¼Ò½º¿¡¼­ bAllowDrag¶ó´Â ¸ðµç ¸íĪÀ» ÀüºÎ ½ºÅ¸ÀÏ·Î ¹Ù²ã¾ß ÇÑ´Ù. ApiEdit.hÀÇ ´ÙÀ½ ¼¼ ÁÙÀ» »èÁ¦ÇÑ´Ù.

 

class CApiEdit : public CWindow

{

     ....

     BOOL bAllowDrag;

     ....

     BOOL GetAllowDrag()  { return bUseLineEnd; }

     void SetAllowDrag(BOOL aAllowDrag) { bAllowDrag=aAllowDrag; }

 

¾×¼¼½º ÇÔ¼ö°¡ ÀζóÀÎÀÌ ¾Æ´Ï¸é ±¸Çö ÆÄÀÏÀÇ Get/Set ÇÔ¼ö Äڵ嵵 ¹°·Ð »èÁ¦ÇØ¾ß ÇÑ´Ù. ApiEdit.cpp¿¡´Â ÀÌ º¯¼ö¸¦ ÃʱâÈ­ÇÏ´Â Äڵ尡 Àִµ¥ ¿ª½Ã »èÁ¦ÇÏ°í ´ë½Å Style º¯¼ö¿¡ ÀÌ ºñÆ®¸¦ ÃʱâÈ­ÇÑ´Ù.

 

CApiEdit::CApiEdit()

{

     ....

     Style=AES_WANTTAB | AES_ALLOWDRAG | AES_AUTOINDENT | AES_BLOCKINDENTWITHTAB |

          AES_HOMETOFIRSTCHAR | AES_HIDECURLINE | AES_CALCTABWITHAVG | AES_HORZSPLITABLE |

          AES_VERTSPLITABLE |    AES_AUTOCONVERT | AES_USEAUTOCLIP | AES_AUTOCLIPBYTAB |

          AES_SHOWMARGIN;

 

´Ù¸¥ ¿É¼Çµéµµ ¸¶Âù°¡Áö·Î µðÆúÆ®°¡ TRUEÀÎ ¸ðµç ¿É¼ÇÀÇ ½ºÅ¸ÀÏÀ» ÇѲ¨¹ø¿¡ ¼³Á¤ÇÏ¸é µÈ´Ù. ÀÌ ½ºÅ¸ÀÏÀ» ÂüÁ¶ÇÏ´Â ¸ðµç °÷µµ ¼öÁ¤ÇØ¾ß ÇÑ´Ù. bAllowDrag´Â µü ÇÑ ±ºµ¥¼­¸¸ ÂüÁ¶ÇÏ°í ÀÖÀ¸¹Ç·Î ¼öÁ¤Çϱ⵵ ½±´Ù.

 

void CApiEditText::OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)

{

     ....

     if (IsInSelection(x+xPos, y+yPos) && pFrame->bReadOnly==FALSE && pFrame->TestStyle(AES_ALLOWDRAG)) {

 

pFrame->bAllowDrag°¡ pFrame->TestStyle(AES_ALLOWDRAG)·Î ¼öÁ¤µÇ¾ú´Ù. ÇÁ·¹ÀÓÀÇ º¯¼ö¸¦ Á÷Á¢ ÂüÁ¶ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó TestStyle ÇÔ¼ö·Î ÇØ´ç ¿É¼ÇÀ» ÀǹÌÇÏ´Â ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖ´ÂÁö¸¦ Á¶»çÇÏ¸é µÈ´Ù. ÀÌ ½ºÅ¸ÀÏÀ» °ü¸®ÇÏ´Â ÄÚµåµéµµ ¸ðµÎ ¼öÁ¤µÈ´Ù. ¼³Á¤ ´ëÈ­»óÀÚÀÇ ÂüÁ¶¹®µéµµ °°Àº ¹æ½ÄÀ¸·Î ¼öÁ¤ÇÑ´Ù.

 

BOOL CALLBACK EditDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

              CheckDlgButton(hDlg,IDC_ALLOWDRAG,NewOption.TestStyle(AES_ALLOWDRAG));

     ....

              NewOption.ChangeStyle(AES_ALLOWDRAG,IsDlgButtonChecked(hDlg,IDC_ALLOWDRAG));

 

½ºÅ¸ÀÏÀ» Àû¿ëÇÏ´Â ApplyNow¿Í SetSetting¿¡¼­´Â ½ºÅ¸ÀÏÀ» °³º°ÀûÀ¸·Î Àû¿ëÇÒ ÇÊ¿ä¾øÀÌ ¸ðµç ½ºÅ¸ÀÏ¿¡ ´ëÇØ SetStyle ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù.

 

void ApplyNow()

{

     ....

          // ½ºÅ¸ÀÏÀÌ º¯°æµÇ¾úÀ¸¸é Àû¿ëÇÑ´Ù.

          if (Option.GetStyle() != NewOption.GetStyle()) {

              Option.SetStyle(NewOption.GetStyle());

              pSi->Ae.SetStyle(NewOption.GetStyle());

          }

 

Option ±¸Á¶Ã¼µµ ApiEdit¿Í ¸¶Âù°¡Áö·Î bAllowDrag´Â ¾ø¾Ö°í Style º¯¼ö¿Í ¾×¼¼½º ÇÔ¼ö¸¸ Ãß°¡ÇÑ´Ù. ·¹Áö½ºÆ®¸®¿¡ °³º° º¯¼ö¸¦ ÀÔÃâ·ÂÇÏ´Â Äڵ嵵 ¸ðµÎ »èÁ¦ÇÏ°í Style º¯¼ö¸¸ ÀÔÃâ·ÂÇÏ¸é µÈ´Ù. ³ª¸ÓÁö ¿É¼Çµéµµ ¸ðµÎ °°Àº ÀýÂ÷´ë·Î ¼öÁ¤Ç쵂 ¿É¼Ç¿¡ µû¶ó ¼öÁ¤ ¹æ¹ýÀÌ Á¶±Ý¾¿ ´Þ¶óÁø´Ù. ºÎ°¡ È¿°ú°¡ ÀÖ´Â ½ºÅ¸ÀÏÀº SetStyle¿¡¼­ È¿°ú¸¦ ó¸®ÇØ¾ß Çϸç MarginWidthó·³ ¿É¼ÇÀ̸鼭 µ¿½Ã¿¡ ÆøÀ» ÀúÀåÇÏ´Â º¯¼ö´Â °ü¸®ÇÏ´Â ¹æ¹ýÀÌ Á¶±Ý ´Ù¸£´Ù.

»ö»ó °ü·Ã º¯¼ö¿Í ÇÔ¼öµéµµ ¸ðµÎ ÅëÇÕÇÑ´Ù. cFore, cBack, MarkColor, RulerColor µî 13°³ÀÇ »ö»ó °ü·Ã º¯¼ö°¡ ÀÖ°í ÀÌ º¯¼öµéÀ» ¾×¼¼½ºÇÏ´Â Get/Set ÇÔ¼öµéÀÌ °³º°ÀûÀ¸·Î Á¸ÀçÇϴµ¥ ÇϳªÀÇ ¹è¿­°ú µÎ °³ÀÇ ÇÔ¼ö·Î ÅëÇÕÇÒ ¼ö ÀÖ´Ù.

 

// »ö»ó ¹øÈ£

enum { AECOLOR_MAR1, AECOLOR_MAR2, AECOLOR_NUM, AECOLOR_MARK, AECOLOR_CODE,

     AECOLOR_CUR, AECOLOR_FORE, AECOLOR_BACK, AECOLOR_SELFORE, AECOLOR_SELBACK,

     AECOLOR_INNERRECT, AECOLOR_RULER, AECOLOR_SELFRAME };

#define AECOLORS 13

 

class CApiEdit : public CWindow

{

     ....

     COLORREF Color[AECOLORS];

     ....

     COLORREF GetColor(int index);

     void SetColor(int index, COLORREF aColor);

 

»ö»óÀ» ÂüÁ¶ÇÏ´Â ¸ðµç °÷¿¡¼­ º¯¼ö ´ë½Å GetColor¿Í »ö»ó À妽º¸¦ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î Àü°æ»öÀÌ ÇÊ¿äÇϸé pFrame->GetColor(AECOLOR_FORE) È£Ãâ¹®À¸·Î Àü°æ»öÀ» Á¶»çÇÑ´Ù. »ö»ó ¼³Á¤ ´ëÈ­»óÀÚµµ ´ë·®ÀÇ ÄÚµå ÆíÁýÀÌ ÇÊ¿äÇÏ´Ù. ¿©±â±îÁö ½ºÅ¸ÀÏ ÅëÇÕ°ú »ö»ó º¯¼öµé ÅëÇÕ ÀÛ¾÷À» ¸¶Ä¡¸é ¼Ò½º´Â 630ÁÙÀ̳ª ÁÙ¾îµé°í ½ÇÇà ÆÄÀÏ Å©±âµµ ÀÛ¾ÆÁö¸ç ¼Óµµµµ »¡¶óÁö°í ·¹Áö½ºÆ®¸®µµ ÈξÀ ´ú »ç¿ëÇÑ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ÄÁÆ®·ÑÀÇ »ç¿ëÀÚµµ ÇÔ¼ö¸¦ °³º°ÀûÀ¸·Î ÀÍÈ÷´Â °Íº¸´Ù ½ºÅ¸ÀÏÀ» ÀÍÈ÷´Â °ÍÀÌ ´õ ½¬¿ì¹Ç·Î ÀÎÅÍÆäÀ̽ºµµ ÈξÀ ´õ ÁÁ¾ÆÁ³´Ù.

ÇÏÁö¸¸ ÀÌ·¸°Ô µÇ¸é ÀÌÁ¦ ´ç±ÙÀº ´õ ÀÌ»ó ½Ç½À °úÁ¤À» º¸ÀÏ ¼ö°¡ ¾ø°Ô µÇ¾ú´Ù. ½ºÅ¸ÀÏ ÅëÇÕÀ» À§ÇØ ¾à 12½Ã°£¿¡ °ÉÄ£ ¼Ò½º ´ë¼ö¼úÀ» Çߴµ¥ ÀÌ ½Ç½À ÀýÂ÷¸¦ Áö¸é¿¡ ÀÏÀÏÀÌ º¸Àδٴ °ÍÀº ºÒ°¡´ÉÇÏ´Ù. º£Å¸ 1±îÁö´Â ´Ü°èº°·Î ½Ç½ÀÀ» ÁøÇàÇØ ¿ÔÁö¸¸ ÀÌÁ¦´Â ´õ ÀÌ»ó ÀÌ·± ´Ü°è ½Ç½À ¹æ½ÄÀ¸·Î Äڵ带 °ü¸®ÇÏ´Â °ÍÀÌ ¾î·Á¿ì¸ç »ç½Ç ÇÊ¿äÄ¡µµ ¾Ê´Ù. ½ºÅ¸ÀÏ ÅëÇÕ °úÁ¤¿¡¼­ ÀϺΠ¿É¼Ç Á¶Á¤ ¹ö±×µµ ¼öÁ¤ÇßÀ¸¸ç »ö»ó°ª°ú ÄÁÆ®·ÑÀÇ ¼ø¼­¸¦ ¸ÂÃß±â À§ÇØ ¸®¼Ò½ºÀÇ ÄÁÆ®·Ñ IDµµ Á¶Á¤Çß´Ù. ÅÇ, °ø¹é, °³ÇàÄÚµå Ç¥½Ã ½ºÅ¸ÀÏ(ShowTabType µî)Àº ¿ø·¡ ºäÀÇ ¸â¹ö¿´À¸³ª À̹ø ÀÛ¾÷¶§ ÇÁ·¹ÀÓÀÇ ¸â¹ö·Î ¿Å°å´Ù.

±â´ÉµéÀ» Áö¼ÓÀûÀ¸·Î È®ÀåÇÏ´Ù º¸¸é Áß°£ Áß°£¿¡ ¼Ò½ºÀÇ ±¸Á¶¸¦ ¹Ù²Ù°Å³ª °íÃÄ¾ß ÇÏ´Â ÀÏÀº ¾ÆÁÖ ÈçÇÏ´Ù. ±×·¯³ª ´ç±ÙÀº ½Ç½À ÇÁ·ÎÁ§Æ®¶ó´Â Ư¼º ¶§¹®¿¡ Áß°£¿¡ ±¸Á¶¸¦ °íÄ¥ ±âȸ°¡ ÀüÇô ¾ø¾ú°í ±×·¯´Ù º¸´Ï °³¹ß ±â°£µµ ´õ ´Ã¾î³¯ ¼ö¹Û¿¡ ¾ø¾ú´Ù. ¹®¼­¿Í ÇÔ²² Á¦°øµÇ´Â ½Ç½À ÇÁ·ÎÁ§Æ®´Â º£Å¸ 1ÀÌ ¸¶Áö¸·ÀÌ¸ç º£Å¸ 2 ÀÌÈĺÎÅÍ´Â ¾îµð¿¡ ¾î¶² Äڵ带 Ãß°¡Çß´ÂÁö µûÀ§ÀÇ ¼³¸í ¹®¼­´Â ´õ ÀÌ»ó ÀÛ¼ºÇÒ ¼ö°¡ ¾ø´Ù. ´ç±Ù 1.2 ÀÌÈÄ¿¡µµ ¼Ò½º¿Í Á¦ÀÛ ±â¼úÀº °ø°³ÇÒ »ý°¢ÀÌÁö¸¸ ½Ç½À °úÁ¤ ¹®¼­´Â ´õ ÀÌ»ó ÀÛ¼ºÇÏÁö ¾ÊÀ¸¹Ç·Î ¾ÕÀ¸·Î´Â ¼Ò½º ÇÁ·ÎÁ§Æ®¸¦ ÅëÇØ ±â¼úÀ» ½º½º·Î ÃßÃâÇØ ³¾ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.