3.´ÜÃàÅ° »ç¿ë

°¡.¸Þ½ÃÁö ·çÇÁ ¼öÁ¤

´ÜÃàÅ° ±â´ÉÀ» Á¦°øÇϴ Ŭ·¡½º¸¦ ¿Ï¼ºÇßÀ¸¹Ç·Î È£½ºÆ®´Â ÀÌ °´Ã¼¸¦ »ç¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù. Dangeun.cpp¿¡¼­ ÀÌ °´Ã¼¸¦ ¼±¾ðÇÑ´Ù.

 

CShortCut DgShortCut;

 

CShortCur Ŭ·¡½º°¡ ´ÜÃàÅ° ÁýÇÕ Àüü¸¦ °ü¸®ÇϹǷΠÀü¿ª °´Ã¼ Çϳª¸¸ ¼±¾ðÇÏ¸é µÈ´Ù. ´ÜÃàÅ° ¼³Á¤ »óŵµ ÀúÀå ´ë»óÀ̱â´Â ÇÏÁö¸¸ °´Ã¼°¡ Å©°í ±æÀÌ°¡ °¡º¯À̱⠶§¹®¿¡ Option ±¸Á¶Ã¼¿¡´Â Æ÷ÇÔ½ÃÅ°Áö ¾Ê´Â´Ù. ´ë½Å °´Ã¼ ½º½º·Î°¡ ·¹Áö½ºÆ®¸®¿¡ ÀÚ½ÅÀÇ »óŸ¦ ÀúÀåÇÏ°í º¹±¸ÇÏ´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù. ¿ÜºÎ¿¡¼­µµ ÀÌ °´Ã¼¸¦ ÀÚÁÖ ÂüÁ¶ÇϹǷΠglobal.h¿¡ extern ¼±¾ðÀ» ÇØ µÐ´Ù.

 

extern CShortCut DgShortCut;

 

ÀÌÁ¦ ´ç±ÙÀº ¾×¼¿·¯·¹ÀÌÅÍ ´ë½Å ÀÌ °´Ã¼°¡ Á¤ÀÇÇÏ´Â ´ÜÃàÅ° ¸ñ·ÏÀ» º¸°í ¸í·ÉÀ» ½ÇÇàÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö°¡ ´ÜÃàÅ° ÆǺ° ¹× ½ÇÇàÀ» ó¸®ÇÑ´Ù. Dangeun.cpp¿¡ ÀÛ¼ºÇÑ´Ù.

 

// µî·ÏµÈ ´ÜÃàÅ°ÀÎÁö º¸°í ´ÜÃàÅ°ÀÌ¸é ½ÇÇà ÈÄ TRUE¸¦ ¸®ÅÏÇÑ´Ù.

BOOL TestShortCut(HWND hWnd,LPMSG msg)

{

     int i;

     BOOL bFind=FALSE;

     BOOL bShift,bControl,bAlt;

     DWORD Flag=0;

     SShortCut *psc;

     HWND hActive;

     SInfo *pSi;

     UINT vk;

 

     if (msg->message != WM_KEYDOWN && msg->message != WM_SYSKEYDOWN) {

          return FALSE;

     }

 

     bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);

     bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);

     bAlt=((GetKeyState(VK_MENU) & 0x8000) != 0);

 

     if (bControl) Flag |= SC_CTRL;

     if (bAlt) Flag |= SC_ALT;

     if (bShift) Flag |= SC_SHIFT;

 

     // ÇÑ±Û Á¶¸³ÁßÀÌ¸é °¡»óÅ°¸¦ µû·Î ±¸ÇÑ´Ù.

     if (msg->wParam==VK_PROCESSKEY) {

          vk=ImmGetVirtualKey(hWnd);

     } else {

          vk=msg->wParam;

     }

 

     for (i=0;DgShortCut.arShortCut[i].vk;i++) {

          psc=&DgShortCut.arShortCut[i];

          // ¸í·É ¸ðµå°¡ ¾Æ´Ò ¶§´Â ¸í·É ¸ðµå¿¡¼­¸¸ ¾µ ¼ö ÀÖ´Â ´ÜÃàÅ° ¹«½Ã

          // Ctrl, Alt°¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀº ¹®ÀÚÅ°´Â ¸í·É ¸ðµå Àü¿ëÀÌ´Ù.

          if (!bComMode && (psc->Flag & (SC_CTRL | SC_ALT)) == 0 &&

                   (psc->vk >= '0' && psc->vk <= 'Z')) {

              continue;

          }

          if ((psc->vk == vk) &&  (psc->Flag == Flag)) {

              bFind=TRUE;

              break;

          }

     }

 

     // ¸í·É ½ÇÇà

     if (bFind) {

          if (psc->id) {

              SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(psc->id,0),0);

          } else {

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

              if (hActive==NULL) {

                   return FALSE;

              }

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

              pSi->Ae.ExecMacro(psc->Com);

          }

          return TRUE;

     }

 

     // ´ÜÃàÅ°°¡ ¾Æ´Ñ °æ¿ì¶óµµ ¸í·É ¸ðµå¿¡¼­ Á¤ÀǵÇÁö ¾ÊÀº ¹®ÀÚÅ°´Â ¹«½ÃÇÑ´Ù.

     if (bComMode) {

          if ((Flag & (SC_CTRL | SC_ALT)) == 0 &&

              (msg->wParam >= '0' && msg->wParam <= 'Z')) {

              return TRUE;

          }

     }

 

     return FALSE;

}

 

ÀÌ ÇÔ¼ö´Â msg·Î Àü´ÞµÈ ¸Þ½ÃÁö°¡ ´ÜÃàÅ°ÀÎÁö Á¡°ËÇØ º¸°í ´ÜÃàÅ°ÀÌ¸é ±â¾ïµÈ ¸í·ÉÀ» ½ÇÇàÇÑ´Ù. ´ÜÃàÅ°°¡ ÀԷµǷÁ¸é ÀÏ´Ü Å°º¸µåÀÇ Å°°¡ ´­·¯Á®¾ß ÇϹǷΠWM_(SYS)KEYDOWN ¸Þ½ÃÁö¸¦ ¹Þ¾Æ¾ß ÇÑ´Ù. ´Ü, ÇÑ±Û ÀÔ·Â ¸ðµå¿¡¼­´Â wParamÀ¸·Î VK_PROCESSKEY°¡ Àü´ÞµÇ´Âµ¥ ½ÇÁ¦ ´­·¯Áø °¡»ó Å°´Â ImmGetVirtualKey ÇÔ¼ö·Î Á¶»çÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϸé ÇѱÛ/¿µ¹® ÀÔ·Â ¸ðµå¿¡ »ó°ü¾øÀÌ ´­·¯Áø °¡»óÅ°¸¦ Á¶»çÇÒ ¼ö ÀÖ´Ù. ¿Ü±¹ ÇÁ·Î±×·¥ÀÌ ÇѱÛÈ­µÈ °æ¿ì´Â ÀÌ·± 󸮰¡ Àß ¾ÈµÇ¾î ÀÖ´Â °æ¿ì°¡ ¸¹´Ù. ¿¹¸¦ µé¾î Æ÷Åä¼¥ÀÇ °æ¿ì Ctrl+S, Ctrl+O µîÀÇ ´ÜÃàÅ°°¡ ¿µ¹®ÀÏ ¶§¸¸ µ¿ÀÛÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù.

´­·¯Áø °¡»óÅ°¿Í Á¶ÇÕÅ°¸¦ arShortCut ¹è¿­¿¡ ÀúÀåµÈ ¸ñ·Ï°ú ºñ±³ÇÏ¿© ´ÜÃàÅ° ¸ñ·Ï¿¡ ÀÖ´Â Å° ÀÔ·ÂÀÎÁö °Ë»çÇÑ´Ù. ¸Þ´º ¸í·ÉÀÎ °æ¿ì WM_COMMAND¸¦ º¸³»¸é »ç¿ëÀÚ°¡ Å°¸¦ ´©¸¥ °Í°ú ¶È°°ÀÌ Ã³¸®µÉ °ÍÀÌ´Ù. ¸ÅÅ©·Î ¸í·ÉÀÏ °æ¿ì È°¼ºÃ¢ÀÇ ExecMacro¸¦ È£ÃâÇÏ¸é ¸ÅÅ©·Î ³»ÀÇ ¸í·ÉµéÀÌ ¼ø¼­´ë·Î ½ÇÇàµÈ´Ù. ´ÜÃàÅ° ¸í·ÉÀ» ½ÇÇàÇßÀ¸¸é TRUE¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é FALSE¸¦ ¸®ÅÏÇÑ´Ù. WinMainÀÇ ¸Þ½ÃÁö ·çÇÁ´Â ´ÙÀ½°ú °°ÀÌ ¼öÁ¤µÈ´Ù.

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

            ,LPSTR lpszCmdParam,int nCmdShow)

{

     ....

    HACCEL hAccel;

 

    hAccel=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1));

     for (;;) {

          do {

              if (!GetMessage(&Message,NULL,0,0))

                   goto endloop;

              if (Message.message != 0x118/*WM_SYSTIMER*/) {

                   AllowIdle=TRUE;

              }

              if (!IsWindow(g_FindDlg) || !IsDialogMessage(g_FindDlg,&Message)) {

                   if (!TranslateMDISysAccel(g_hMDIClient, &Message)) {

                   if (!TestShortCut(hWnd,&Message)) {

                            TranslateMessage(&Message);

                            DispatchMessage(&Message);

                        }

                   }

              }

          } while (PeekMessage(&Message,NULL,0,0,PM_NOREMOVE));

 

TranslatAccelerator ÇÔ¼ö ´ë½Å TestShortCut ÇÔ¼ö¸¦ »ç¿ëÇß´Ù. ¾×¼¼·¯·¹ÀÌÅÍ ´ë½Å Á÷Á¢ ¸¸µç ´ÜÃàÅ° ¸ñ·ÏÀ» »ç¿ëÇϹǷΠhAccel º¯¼ö ¼±¾ð¹®°ú LoadAccelerator ÇÔ¼ö È£ÃâÀº ÀÌÁ¦ ÇÊ¿ä¾ø´Ù. ¸®¼Ò½º¿¡¼­ ¾×¼¿·¯·¹ÀÌÅ͵µ »èÁ¦Çصµ µÇ³ª ½Ç½ÀÁß¿¡ ¸®¼Ò½º´Â Àбâ Àü¿ëÀ̹ǷΠÀÏ´Ü ±×³É µÎ±â·Î ÇÑ´Ù. ´ÙÀ½ ÄÚµå´Â ´ÜÃàÅ° ¸ñ·ÏÀ» ÃʱâÈ­ÇÑ´Ù.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     if (SHRegReadInt(SHCU,KEY"Setting","StartAction",1000) == 1000) {

          Option.GetStyleColor();

        DgShortCut.Init();

          FindFlag=AE_FIND_WRAP | AE_FIND_RECURSIVE;

          arFind[3].num=2;

          arFind[3].Set(0,"*.*");

          arFind[3].Set(1,"*.cpp;*.hpp;*.c;*.h;*.inl");

     } else {

          Option.Load(KEY);

        DgShortCut.Load(KEY);

          DgMacro.LoadFromReg(KEY);

          ....

 

ÃÖÃÊ ¼³Ä¡½Ã¿¡´Â Init ÇÔ¼ö¸¦ È£ÃâÇÏ¿© µðÆúÆ® ´ÜÃàÅ° ¸ñ·ÏÀ¸·Î ÃʱâÈ­ÇÏ°í ÀÌÈĺÎÅÍ´Â ·¹Áö½ºÆ®¸®¿¡¼­ ¸ñ·ÏÀ» Àд´Ù. ¸Å ½ÇÇàÇÒ ¶§¸¶´Ù ´ÜÃàÅ° ¸ñ·ÏÀÌ ÆíÁýµÉ ¼ö ÀÖÀ¸¹Ç·Î OnDestroy¿¡¼­´Â ÆíÁýµÈ ¸ñ·ÏÀ» ÀúÀåÇÑ´Ù.

 

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

{

     Option.Save(KEY);

    DgShortCut.Save(KEY);

     DgMacro.SaveToReg(KEY);

 

°³¹ßÁß¿¡ ´ÜÃàÅ° ¸ñ·ÏÀ» ÃʱâÈ­ÇÏ·Á¸é ¼³Ä¡ ÇØÁ¦ ÈÄ¿¡ ´Ù½Ã ½ÇÇàÇϵ簡 ¾Æ´Ï¸é Init¸¦ Àá½Ã ¹ÛÀ¸·Î »© ³õ¾Æ OnCreateÀÇ ³¡ ºÎºÐ¿¡ ¿Å°Ü µÎ¾î¾ß ÇÑ´Ù. °³¹ßÁßÀ̱⠶§¹®¿¡ ÀÌ·± ºÒÆíÇÔÀÌ ÀÖÁö¸¸ ÃÖÁ¾ »ç¿ëÀÚµéÀÌ Ã³À½ºÎÅÍ ¼³Ä¡ÇØ »ç¿ëÇÒ ¶§´Â ÀÌ·± ¹®Á¦°¡ ¾øÀ» °ÍÀÌ´Ù. DgShortCut °´Ã¼°¡ ¾×¼¿·¯·¹ÀÌÅÍ Å×À̺íÀ» ¿ÏÀüÈ÷ ´ëüÇÏ°í ÀÖÀ¸¹Ç·Î ÀÌÀü ¹öÀü°ú µ¿ÀÛÀº µ¿ÀÏÇÏ´Ù. ´Ü, ÀÌÁ¦ DgShortCutÀ» Á¶ÀÛÇÏ¸é ´ÜÃàÅ°¸¦ ¿øÇϴ´ë·Î ÆíÁýÇÒ ¼ö ÀÖ´Ù.

³ª.¸í·É ¸ðµå

¸í·É ¸ðµå¶õ A~Z, 1~0±îÁöÀÇ ÀϹÝÀûÀÎ ¹®ÀÚÅ°¸¦ ´ÜÃàÅ°·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµåÀÌ´Ù. ÀÌ Å°µéÀº ÀÏ¹Ý ¸ðµå¿¡¼­´Â ¹®ÀÚ ÀÔ·ÂÀ¸·Î Çؼ®µÇÁö¸¸ ¸í·É ¸ðµå¿¡¼­´Â ¸í·ÉÀ¸·Î Çؼ®µÈ´Ù. ¹Ýº¹ÀûÀÎ ÆíÁýÀ» ÇÒ ¶§´Â Ctrl+X, Ctrl+V °°Àº ´ÜÃàÅ°¸¦ ¹Ýº¹ÀûÀ¸·Î ´©¸¦ ÀÏÀÌ ¸¹Àºµ¥ CtrlÀ» °è¼Ó ´©¸£°í ÀÖÁö¸¸ ¿ÞÂÊ »õ³¢ ¼Õ°¡¶ôÀÌ ¾îÁö°£È÷ ÇÇ°ïÇØÁø´Ù. ÀÌ·² ¶§ ¸í·É ¸ðµå¸¦ »ç¿ëÇÏ¸é ¹®ÀÚÅ°¸¶´Ù °íÀ¯ÀÇ ´ÜÃàÅ°¸¦ ÇÒ´çÇÒ ¼ö ÀÖ¾î Æí¸®ÇÏ´Ù.

¸í·É ¸ðµåÀÇ ¹Ý´ë ¸ðµå´Â ÆíÁý ¸ðµåÀ̸ç ÀÌ ¸ðµå¿¡¼­´Â Æã¼ÇÅ° µî ¸î °¡Áö Å°¸¸ ´Üµ¶À¸·Î ´ÜÃàÅ°°¡ µÉ ¼ö ÀÖ´Ù. ¸í·É ¸ðµå¿¡¼­´Â ¹°·Ð ¹®ÀÚ ÀÔ·ÂÀ» ÇÒ ¼ö ¾øÀ¸¹Ç·Î µÎ ¸ðµå »çÀ̸¦ Àû´çÀÌ ¿Ô´Ù °¬´Ù Çϸ鼭 ÆíÁý ¹× ÀÔ·Â ÀÛ¾÷À» ÇØ¾ß ÇÑ´Ù. µÎ ¸ðµå¸¦ ±¸ºÐÇϱâ À§ÇØ ´ÙÀ½ Àü¿ª º¯¼ö¸¦ ¼±¾ðÇÑ´Ù.

 

BOOL bComMode;

 

º°µµ·Î ÃʱâÈ­ÇÏÁö ¾ÊÀ¸¹Ç·Î FALSE·Î ÃʱâÈ­µÇ¸ç µðÆúÆ® ¸ðµå´Â ÆíÁý ¸ðµåÀÌ´Ù. ÆíÁý/¸í·É ¸ðµå Ç׸ñÀ¸·Î ÀÌ º¯¼ö¸¦ Åä±ÛÇϸç OnInitMenu¿¡¼­ ÇöÀç ¸ðµå¸¦ Ç¥½ÃÇÑ´Ù.

 

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

{

     ...

     case IDM_EDIT_COMMODE:

          bComMode=!bComMode;

          break;

 

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

{

     ....

     if (bComMode) {

          CheckMenuItem(hMenu, IDM_EDIT_COMMODE, MF_BYCOMMAND | MF_CHECKED);

     } else {

          CheckMenuItem(hMenu, IDM_EDIT_COMMODE, MF_BYCOMMAND | MF_UNCHECKED);

     }

}

 

´ÜÃàÅ°´Â Å°°¡ ´­·¯Áú ¶§¸¸ »ç¿ëµÇ´Â °ÍÀ̹ǷΠ¸ðµå°¡ ¹Ù²ï´Ù°í Çؼ­ ´çÀå ¾î¶² µ¿ÀÛÀ» ÇÒ ÇÊ¿ä´Â ¾ø´Ù. DefaultShortCut¿¡ ¸í·É ¸ðµåÀÇ ´ÜÃàÅ°µéÀÌ ÀÌ¹Ì Ãß°¡µÇ¾î ÀÖÀ¸¸ç TestShortCut ÇÔ¼ö¿¡¼­ ¸í·É ¸ðµå¸¦ ÀÌ¹Ì Ã³¸®ÇÏ°í ÀÖ´Ù. ¸í·É ¸ðµå¿¡¼­´Â CÅ°·Î º¹»çÇÒ ¼ö ÀÖ°í VÅ°·Î ºÙ¿© ³ÖÀ» ¼ö ÀÖ´Ù. OnIdle¿¡¼­ ¸í·É ¸ðµå Åø¹Ù¸¦ °ü¸®ÇÑ´Ù.

 

void OnIdle()

{

     ....

     if (hActive) {

          ....

          if (bComMode) {

              SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COMMODE,

                   MAKELONG(TBSTATE_ENABLED | TBSTATE_CHECKED,0));

          } else {

              SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COMMODE,MAKELONG(TBSTATE_ENABLED,0));

          }

     } else {

          ....

          SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COMMODE,MAKELONG(0,0));

     }

}

 

¸í·É ¸ðµåÀ̸é Åø ¹öÆ°À» üũÇÏ°í È°¼ºÃ¢ÀÌ ¾øÀ¸¸é ¸í·É ¹öÆ°À» »ç¿ëÇÒ ¼ö ¾ø´Ù. ¸í·É ¸ðµå¿¡ Àͼ÷ÇÏÁö ¾ÊÀº »ç¶÷Àº ÀÌ ¸ðµå°¡ ¹«Ã´ ÀÌ»óÇØ º¸ÀÏ °ÍÀÌ´Ù. ±×·¯³ª À¯´Ð½ºÀÇ vi ¿¡µðÅÍ¿¡ Àͼ÷ÇÑ »ç¶÷Àº ¸ðµå¸¦ ¹Ù²ã°¡¸ç ÆíÁýÇÏ´Â °ÍÀÌ ¹«Ã´ Æí¸®ÇÏ´Ù°í ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¼Õ°¡¶ôÀÌ Å°º¸µå¸¦ ¶°³ªÁö ¾Ê°íµµ ±²ÀåÈ÷ º¹ÀâÇÑ µ¿ÀÛµéÀ» ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¹°·Ð ÀÌ·¸°Ô µÇ·Á¸é Àڽſ¡°Ô ²À ¸Â´Â ´ÜÃàÅ° ±¸¼ºÀ» °³¹ßÇÏ°í Àͼ÷ÇØÁ®¾ß ÇÑ´Ù.

´Ù.MRU ¼öÁ¤

Á¸ÀçÇÏÁö ¾Ê´Â ¸Þ´º¸¦ ¼±ÅÃÇÒ ¼ö´Â ¾ø±â ¶§¹®¿¡ CMru´Â ¿äûÇÑ ÆÄÀϸíÀÇ À妽º¸¦ Á¡°ËÇÏÁö ¾Ê¾Ò´Ù. ±×·¯³ª ÀÌÁ¦ ´ÜÃàÅ°·Îµµ ÃÖ±Ù ÆÄÀÏÀ» ºÒ·¯³¾ ¼ö Àֱ⠶§¹®¿¡ ÇØ´ç ´ÜÃàÅ°¿Í ´ëÀÀµÇ´Â ÃÖ±Ù ÆÄÀÏÀÌ Ç×»ó ÀÖ´Ù°í º¸ÀåÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ CMruÀÇ GetFilePath ÇÔ¼ö¸¦ ¼öÁ¤ÇÏ¿© ¹«È¿ÇÑ ÆÄÀÏÀÎ °æ¿ìÀÇ ¿¡·¯¸¦ ó¸®ÇØ¾ß ÇÑ´Ù.

 

BOOL CMru::GetFilePath(int nIndex,TCHAR *buf)

{

    if (nIndex >= arMru.num) {

        return FALSE;

    }

     lstrcpy(buf,arMru.Get(nIndex));

    return TRUE;

}

 

¿ø·¡´Â ¸®ÅÏ°ªÀÌ ¾ø¾úÀ¸³ª nIndexÀÇ ¹üÀ§°¡ Ʋ¸®¸é FALSE¸¦ ¸®ÅÏÇϵµ·Ï ¼öÁ¤Çß´Ù. CHistroy Ŭ·¡½ºÀÇ numÀÌ º¸È£µÈ ¸â¹ö¶ó¸é CHistoryÀÇ GetÇÔ¼öºÎÅÍ ¼öÁ¤ÇØ¾ß Çϳª ´ÙÇàÈ÷ ±×·² ÇÊ¿ä±îÁö´Â ¾ø´Ù. OnCommand´Â ´ÙÀ½°ú °°ÀÌ ¼öÁ¤µÈ´Ù.

 

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

{

     ....

     if (LOWORD(wParam) >= Mru.MenuID && LOWORD(wParam) < Mru.MenuID+Mru.MaxMru) {

          idx=LOWORD(wParam)-Mru.MenuID;

        if (Mru.GetFilePath(idx,Path)==FALSE) {

           return;

        }

          if (strnicmp(Path,"http",4) != 0 && strnicmp(Path,"ftp",3) != 0) {

              ....

 

¼±ÅÃÇÑ ÃÖ±Ù ÆÄÀÏ ¸Þ´º°¡ Ç×»ó ÀÖ´Ù°í °¡Á¤ÇÏÁö ¾Ê°í ¸®ÅÏ°ªÀ» Á¡°ËÇØ º¸°í FALSE¸¦ ¸®ÅÏÇÏ¸é ¾Æ¹« Àϵµ ÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î ´Ù¼¸°³ÀÇ ÃÖ±Ù ÆÄÀÏÀÌ µî·ÏµÇ¾î Àִµ¥ Ctrl+Alt+6À» ´©¸£¸é ¿­ ÆÄÀÏÀÌ ¾ø´Ù. ±×³É ³»¹ö·Á µÎ¸é Path¿¡ ¾²·¹±â°ªÀÌ ¸®ÅϵǹǷΠÆÄÀÏÀ» ¿­Áö ¸øÇÏ°í ÀÖÁöµµ ¾ÊÀº ÃÖ±Ù ÆÄÀÏ ¸ñ·ÏÀ» »èÁ¦ÇÏ·Á°í ½ÃµµÇÒ °ÍÀÌ´Ù. ÀÌÀü ¹öÀü¿¡¼­´Â ¹®Á¦°¡ ¾ø¾úÀ¸³ª ±â´ÉÀÌ Ãß°¡µÇ¸é ¹®Á¦°¡ µÇ´Â ºÎºÐÀÌ »õ·Î »ý±â±âµµ ÇÑ´Ù. CMru´Â ¸Þ´º·Î¸¸ ¼±ÅÃÇÑ´Ù¸é Á¤È®ÇÏ°Ô µ¿ÀÛÇÏÁö¸¸ ´ÜÃàÅ° ¶§¹®¿¡ À߸øµÈ µ¿ÀÛÀ» ÇÒ ¼öµµ ÀÖ´Ù.

±×·¡¼­ ¸ðµç ÇÔ¼ö´Â °¡±ÞÀûÀÌ¸é ¸®ÅÏ°ªÀ¸·Î ¿¡·¯ ¿©ºÎ¸¦ ¸®ÅÏÇÏ´Â °ÍÀÌ ÁÁ´Ù°í ÇÑ´Ù. ¿øÄ¢ÀûÀ¸·Î CHistoryÀÇ Get ÇÔ¼öµµ ´çÀåÀº ¹®Á¦°¡ ¾øÁö¸¸ idx°¡ ¹üÀ§¸¦ ³Ñ¾î ¼³ ¶§¸¦ ó¸®ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¯³ª ¿ø·ÐÀûÀ¸·Î´Â ±×·¸Áö¸¸ ¸ðµç ÇÔ¼ö¸¦ ÀÌ·± ½ÄÀ¸·Î ÀÛ¼ºÇÏÀÚ¸é ³Ê¹« ³Ê¹« ÇÇ°ïÇØÁö±â ¶§¹®¿¡ Àû´çÇÑ ¼öÁرîÁö¸¸ ÇÏ´Â °ÍÀÌ ÁÁ´Ù°í »ý°¢ÇÑ´Ù. ÀÌ°ÍÀÌ À̷аú ½ÇÁ¦ÀÇ Â÷ÀÌÀÎ °Í °°´Ù.