´Ù. ¹Ù²Ù±â

¹Ù²Ù±â´Â Á¶°Ç¿¡ ¸Â´Â ¹®ÀÚ¿­À» ã¾Æ ´Ù¸¥ ¹®ÀÚ¿­·Î º¯°æÇÏ´Â ±â´ÉÀÌ´Ù. ÀÏ´Ü ¹®ÀÚ¿­À» ã¾Æ¾ß ¹Ù²Ù±â¸¦ ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ã±â ±â´ÉÀÇ È®ÀåÀ̶ó°í »ý°¢ÇÒ ¼ö ÀÖ´Ù. ´ëÈ­»óÀÚÀÇ ¸ð¾çÀº ´ÙÀ½°ú °°´Ù.

±â´ÉÀÌ À¯»çÇϱ⠶§¹®¿¡ ´ëÈ­»óÀÚµµ ºñ½ÁÇÏ´Ù. °Ë»ö ¿Ï·á ÈÄ ´ëÈ­»óÀÚ ´Ý±â ¿É¼ÇÀÌ »ç¶óÁ³°í ´ë½Å ¹Ù²Ü ³»¿ë ÄÞº¸¹Ú½º¿Í ¹Ù²Ù±â, ¸ðµÎ ¹Ù²Ù±â ¹öÆ°ÀÌ Ãß°¡µÇ¾ú´Ù. ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú´Â ã±â ´ëÈ­»óÀÚ¿Í °øÀ¯ÇÑ´Ù. ¿É¼ÇÀ» ó¸®ÇÏ´Â ºÎºÐµéÀÌ ºñ½ÁÇϱ⠶§¹®¿¡ ±»ÀÌ µû·Î ÇÁ·Î½ÃÀú¸¦ ¸¸µé ÇÊ¿ä°¡ ¾ø´Ù. ã±â ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú¿¡ ¸î °¡Áö Äڵ常 Ãß°¡ÇÏ¸é µÈ´Ù.

 

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

{

     switch(iMessage)

     {

     case WM_INITDIALOG:

          ....

          RefillHistory(GetDlgItem(hDlg,IDC_FIND_WHAT),arFind[0]);

        RefillHistory(GetDlgItem(hDlg,IDC_FIND_TO),arFind[1]);

          SendMessage(GetDlgItem(hDlg,IDC_FIND_WHAT), CB_LIMITTEXT, (WPARAM)255, 0);

        SendMessage(GetDlgItem(hDlg,IDC_FIND_TO), CB_LIMITTEXT, (WPARAM)255, 0);

          SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_WHAT,CBN_EDITCHANGE),0);

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam))

          {

          case IDC_FIND_WHAT:

              switch (HIWORD(wParam)) {

              case CBN_EDITCHANGE:

                   if (GetWindowTextLength(GetDlgItem(hDlg,IDC_FIND_WHAT)) == 0) {

                        EnableWindow(GetDlgItem(hDlg,IDC_BTNFIND),FALSE);

                   } else {

                        EnableWindow(GetDlgItem(hDlg,IDC_BTNFIND),TRUE);

                   }

               SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_TO,CBN_EDITCHANGE),0);

                   break;

              case CBN_SELCHANGE:

                   PostMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_WHAT,CBN_EDITCHANGE),0);

                   break;

              }

              break;

        case IDC_FIND_TO:

           switch (HIWORD(wParam)) {

           case CBN_EDITCHANGE:

               if (GetWindowTextLength(GetDlgItem(hDlg,IDC_FIND_TO)) == 0 ||

                   GetWindowTextLength(GetDlgItem(hDlg,IDC_FIND_WHAT)) == 0) {

                   EnableWindow(GetDlgItem(hDlg,IDC_BTNREPLACE),FALSE);

                   EnableWindow(GetDlgItem(hDlg,IDC_BTNREPLACEALL),FALSE);

               } else {

                   EnableWindow(GetDlgItem(hDlg,IDC_BTNREPLACE),TRUE);

                   EnableWindow(GetDlgItem(hDlg,IDC_BTNREPLACEALL),TRUE);

               }

               break;

           case CBN_SELCHANGE:

               PostMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_TO,CBN_EDITCHANGE),0);

               break;

           }

           break;

          case IDCANCEL:

              DestroyWindow(hDlg);

              break;

          case IDC_BTNFIND:

        case IDC_BTNREPLACE:

        case IDC_BTNREPLACEALL:

              ....

           GetDlgItemText(hDlg,IDC_FIND_TO,szTemp,255);

           if (lstrlen(szTemp)) {

               arFind[1].Add(szTemp);

               RefillHistory(GetDlgItem(hDlg,IDC_FIND_TO),arFind[1]);

           }

 

              switch (LOWORD(wParam)) {

              case IDC_BTNFIND:

                   SendMessage(GetParent(hDlg),WM_USER+2,1,0);

                   if (FindFlag & AE_FIND_CLOSE) {

                        DestroyWindow(hDlg);

                   }

                   break;

           case IDC_BTNREPLACE:

               SendMessage(GetParent(hDlg),WM_USER+2,2,0);

               break;

           case IDC_BTNREPLACEALL:

               SendMessage(GetParent(hDlg),WM_USER+2,3,0);

               break;

              }

              return TRUE;

          }

          return FALSE;

     }

     return FALSE;

}

 

WM_INITDIALOG¿¡¼­´Â arFind[1] ¸ñ·ÏÀ» IDC_FIND_TO ÄÞº¸¹Ú½º¿¡ ´ëÀÔÇÑ´Ù. ¹Ù²Ù±â, ¸ðµÎ ¹Ù²Ù±â ¹öÆ°Àº ãÀ» ³»¿ë°ú ¹Ù²Ü ³»¿ëÀÌ ¸ðµÎ ÀԷµǾî ÀÖ¾î¾ß »ç¿ë °¡´ÉÇÏ´Ù. ±×·¡¼­ IDC_FIND_TO ÄÞº¸¹Ú½ºÀÇ ±æÀÌ¿Í IDC_FIND_WHAT ÄÞº¸¹Ú½ºÀÇ ±æÀÌ°¡ ¸ðµÎ 0º¸´Ù Ä¿¾ß¸¸ »ç¿ë Çã°¡ µÈ´Ù. IDC_FIND_WHATÀÌ ÆíÁýµÉ ¶§µµ ÀÌ Á¡°ËÀ» ÇØ¾ß ÇÑ´Ù.

¹Ù²Ù±â, ¸ðµÎ ¹Ù²Ù±â ¹öÆ°À» Ŭ¸¯Çϸé ÄÁÆ®·Ñ¿¡ ¼³Á¤µÈ ¿É¼Ç°ú ãÀ» ³»¿ë, ¹Ù²Ü ³»¿ëÀ» ÀоîµéÀδÙ. ÀÐÀº °á°ú´Â arFind[0], arFind[1] ¸ñ·ÏÀÇ Ã¹ Ç׸ñ°ú FindFlag¿¡ ÀúÀåµÉ °ÍÀÌ´Ù. ã±â ±â´É°ú ¸¶Âù°¡Áö·Î ¸ÞÀÎ À©µµ¿ì·Î WM_USER+2 ¸Þ½ÃÁö¸¦ º¸³»µÇ wParamÀº °¢°¢ 2,3À¸·Î Àü´ÞÇÏ¿´´Ù. Áï WM_USER+2´Â ã±â/¹Ù²Ù±â ´ëÈ­»óÀڷκÎÅÍ ¸ÞÀÎ À©µµ¿ì·ÎÀÇ ¿äûÀ» Àü´ÞÇÏ´Â ¸Þ½ÃÁöÀ̸ç wParamÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾú´Ù.

 

wParam

¸í·É

1

ã±â

2

¹Ù²Ù±â

3

¸ðµÎ ¹Ù²Ù±â

 

¸ÞÀÎ À©µµ¿ìÀÇ OnUser2 ÇÔ¼ö´Â wParam°ª¿¡ µû¶ó ã±â ¹× ¹Ù²Ù±â¸¦ ÇÏ¸é µÈ´Ù. ¸Þ´ºÀÇ ¹Ù²Ù±â Ç׸ñÀ» ¼±ÅÃÇÏ¸é ¹Ù²Ù±â ´ëÈ­»óÀÚ¸¦ º¸¿©ÁØ´Ù.

 

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

{

     ....

     case IDM_SEARCH_REPLACE:

          if (!IsWindow(g_FindDlg)) {

              g_FindDlg=CreateDialog (g_hInst,MAKEINTRESOURCE(IDD_REPLACE),hWnd,FindDlgProc);

              ShowWindow(g_FindDlg,SW_SHOW);

          } else {

              SetFocus(g_FindDlg);

          }

          break;

 

´ëÈ­»óÀÚ¸¦ º¸¿©ÁÖ´Â Äڵ嵵 ã±â ´ëÈ­»óÀÚ¿Í °ÅÀÇ µ¿ÀÏÇÏ´Ù. ´ëÈ­»óÀÚ ÅÛÇø®Æ®ÀÇ ID¸¸ ´Ù¸¦ »Ó ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú±îÁö µ¿ÀÏÇÏ´Ù. ã±â µ¿ÀÛÀÇ ÁÖü°¡ CApiEdit °´Ã¼À̵íÀÌ ¹Ù²Ù±â µ¿ÀÛµµ CApiEdit°¡ Á÷Á¢ ÇØ¾ß ÇÑ´Ù. CApiEdit Ŭ·¡½º¿¡ ¹Ù²Ù±â ÇÔ¼ö¸¦ Ãß°¡Çϵµ·Ï ÇÏÀÚ.

 

int CApiEdit::ReplaceText(int nPos, TCHAR *what, DWORD dwFlag, TCHAR *to)

{

     int len;

     TCHAR *pSel;

     TCHAR *pWhat;

     int Result;

 

     if (SelStart == SelEnd) {

          if (FindText(nPos,what,dwFlag) == TRUE) {

              Result=1;

          } else {

              Result=0;

          }

     } else {

          pWhat=(TCHAR *)malloc(lstrlen(what)+1);

          lstrcpy(pWhat,what);

 

          len=abs(SelStart-SelEnd);

          pSel=(TCHAR *)malloc(len+1);

          lstrcpyn(pSel,buf+min(SelStart,SelEnd),len+1);

 

          if ((dwFlag & AE_FIND_MATCHCASE) == 0) {

              CharUpper(pWhat);

              CharUpper(pSel);

          }

 

          if (lstrcmp(pWhat,pSel) != 0) {

              if (FindText(nPos,what,dwFlag) == TRUE) {

                   Result=1;

              } else {

                   Result=0;

              }

          } else {

              StartUndoGroup();

              DeleteSelection();

              Insert(off,to);

              off+=lstrlen(to);

              SetCaret();

              Invalidate(-1);

              FindText(off,what,dwFlag);

              Result=2;

              EndUndoGroup();

          }

          free(pWhat);

          free(pSel);

     }

     return Result;

}

 

¼±Åÿµ¿ªÀÌ ¾ø°Å³ª ÀÖ´õ¶óµµ °Ë»ö ´ë»ó ¹®ÀÚ¿­ÀÌ ¾Æ´Ï¸é ¹Ù²Ù±â¸¦ ÇÏÁö ¾Ê°í ´ÙÀ½ ã±â¸¦ ½ÇÇàÇÑ´Ù. Áï ÀÌ ÇÔ¼ö´Â ¼±ÅÃµÈ ÅؽºÆ®°¡ °Ë»ö ´ë»ó°ú °°À» ¶§¸¸ ¹Ù²Ù±â¸¦ ÇÏ°í ±×·¸Áö ¾ÊÀ» °æ¿ì´Â ã±â¿Í µ¿ÀÏÇÑ µ¿ÀÛÀ» ÇÑ´Ù. ¹Ù²Ù±â´Â ¸ÕÀú ¹Ù²Ü ´ë»óÀ» ¼±ÅÃÇÑ ÈÄ ´Ù¸¥ ÅؽºÆ®·Î ¹Ù²Ù´Â °ÍÀ̹ǷΠ¹Ù²Ü ´ë»óÀÌ ¼±ÅõǾî ÀÖÁö ¾ÊÀ¸¸é ¼±ÅÃÀ» ¸ÕÀú ÇÏ´Â °ÍÀÌ ¼ø¼­¿¡ ¸Â´Ù.

¹Ù²Ü ´ë»óÀÌ ¼±ÅõǾî ÀÖÀ¸¸é ¹®ÀÚ¿­À» ´ëüÇϴµ¥ ¹æ¹ýÀº ¾ÆÁÖ ¿ø·ÐÀûÀÌ´Ù. DeleteSelectionÀ¸·Î ¼±ÅÃµÈ ÅؽºÆ®¸¦ ¸ÕÀú »èÁ¦ÇÏ°í ¹Ù²Ü ¹®ÀÚ¿­À» ±× À§Ä¡¿¡ »ðÀÔÇØ ³ÖÀ¸¸é °¨ÂÊ°°ÀÌ ¹®ÀÚ¿­ÀÌ ´ëüµÉ °ÍÀÌ´Ù. À̶§ »èÁ¦¿Í »ðÀÔÀº ¹Ù²Ù±â µ¿ÀÛ Çϳª¸¦ ±¸¼ºÇÏ´Â ¼¼ºÎ µ¿ÀÛÀ̹ǷΠÇϳªÀÇ ÆíÁý µ¿ÀÛÀ¸·Î º¸¾Æ¾ß ÇÏ¸ç ±×·¡¼­ µÎ °³ÀÇ Ãë¼Ò ·¹Äڵ带 ±×·ìÀ¸·Î ¹­¾î ÁÖ¾ú´Ù. <Ctrl+Z>·Î ¹Ù²Ù±â¸¦ Ãë¼ÒÇÏ¸é ¹Ù²Ù±â ÀüÀÇ »óÅ·ΠÁ¤È®ÇÏ°Ô µ¹¾Æ°¥ °ÍÀÌ´Ù.

¹Ù²Ù±â´Â ¿©·¯ ¹ø ¹Ýº¹ÀûÀ¸·Î ½ÇÇàÇÒ °æ¿ì°¡ ¸¹À¸¹Ç·Î ¹Ù²Ù±â¸¦ ÇÑ ÈÄ ´ÙÀ½ ¹®ÀåÀ» ¼±ÅÃÇÏ¿© °è¼Ó ¹Ù²Ù±â¸¦ ÇÒ ¼ö ÀÖµµ·Ï Çß´Ù. ÀÌ ÇÔ¼ö´Â ¹Ù²Ù±â µ¿ÀÛÀÇ °á°ú¸¦ ¸®ÅÏÇϴµ¥ ¼¼ °¡Áö ¸®ÅÏ°ªÀ» °¡Áø´Ù. ¹Ù²Ü ´ë»óÀÌ ¼±ÅõǾî ÀÖÁö ¾Ê¾Æ ã±â¸¸ ÇßÀ¸¸é 1À» ¸®ÅÏÇϸç ã±â¿Í ¹Ù²Ù±â¸¦ ´Ù ÇßÀ¸¸é 2¸¦ ¸®ÅÏÇÏ°í °Ë»ö¿¡ ½ÇÆÐÇϸé 0À» ¸®ÅÏÇÑ´Ù. È£½ºÆ®´Â ÀÌ ¸®ÅÏ°ªÀ» º¸°í ¸î °³ÀÇ ¹®ÀÚ¿­ÀÌ ´ëüµÇ¾ú´ÂÁö Çì¾Æ¸®¸ç ã±â °á°ú¸¦ »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÙ °ÍÀÌ´Ù.

ÀÌ ÇÔ¼ö´Â È£½ºÆ®ÀÇ OnUser2¿¡¼­ È£ÃâµÈ´Ù. OnUser2´Â ã±â/¹Ù²Ù±â ´ëÈ­»óÀڷκÎÅÍÀÇ ¿äûÀ» ¹Þ¾Æ wParam°ª¿¡ µû¶ó ApiEdit¿¡°Ô ¿äûÀ» Àü´ÞÇϸç Á¤È®ÇÑ µ¿ÀÛÀ» À§ÇÑ ¸î °¡Áö 󸮸¦ ÇÑ´Ù. ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

 

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

{

     HWND hActive;

     SInfo *pSi;

    int i;

    DWORD tFlag;

    TCHAR Mes[512];

 

     if (IsWindowEnabled(hWnd)==FALSE)

          return;

 

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

     if (hActive == NULL) {

          return;

     }

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

     switch (wParam) {

     case 1:

          if (pSi->Ae.FindText(-1,arFind[0].Get(0), FindFlag) == FALSE) {

              MessageBox(hWnd,"ã´Â ¹®ÀÚ¿­ÀÌ ¾ø½À´Ï´Ù.","¾Ë¸²",MB_OK);

          }

          break;

    case 2:

        if (pSi->Ae.ReplaceText(-1,arFind[0].Get(0), FindFlag,arFind[1].Get(0)) == 0) {

           MessageBox(hWnd,"ã´Â ¹®ÀÚ¿­ÀÌ ¾ø½À´Ï´Ù.","¾Ë¸²",MB_OK);

        }

        break;

    case 3:

        int Result;

        pSi->Ae.StartUndoGroup();

        for (i=0;;) {

           tFlag=FindFlag;

           tFlag &= ~AE_FIND_WRAP;

           Result=pSi->Ae.ReplaceText(-1,arFind[0].Get(0), tFlag,arFind[1].Get(0));

           UpdateWindow(pSi->Ae.hWnd);

           if (Result==0)

               break;

           if (Result==2)

               i++;

        }

        pSi->Ae.EndUndoGroup();

        if (i==0) {

           lstrcpy(Mes,"ã´Â ¹®ÀÚ¿­ÀÌ ¾ø½À´Ï´Ù");

        } else {

           wsprintf(Mes, "ÃÑ %d°³ÀÇ \"%s\"¹®ÀÚ¿­À» \"%s\"·Î ¹Ù²Ù¾ú½À´Ï´Ù",

               i,arFind[0].Get(0), arFind[1].Get(0));

        }

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

        break;

     }

}

 

ÇÑ ¹ø¸¸ ¹Ù²Ù±â¸¦ ÇÒ ¶§´Â ReplaceText¸¦ È£ÃâÇÏ°í ±× °á°ú¸¦ »ç¿ëÀÚ¿¡°Ô ¾Ë·Á Áֱ⸸ ÇÏ¸é µÈ´Ù. ¸ðµÎ ¹Ù²Ù±â¸¦ ÇÒ ¶§´Â µÇµ¹¸®±â(WRAP) ¿É¼ÇÀ» Àá½Ã ²¨ µÎ¾î¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¹Ù²Û °á°ú °Ë»ö ´ë»ó ¹®ÀÚ¿­ÀÌ ¾ÆÁ÷µµ ³²¾Æ ÀÖÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¡®¹Ùº¸¡¯¸¦ ¡®ÃµÀ硯·Î ¸ðµÎ ¹Ù²Û´Ù¸é ¸ðµç ¹Ùº¸°¡ õÀç°¡ µÊÀ¸·Î½á ¹®Á¦°¡ ¾øÁö¸¸ ¡®¹Ùº¸¡¯¸¦ ¡®¾È¹Ùº¸¡¯·Î ¹Ù²Û´Ù¸é ¹Ù²Û °á°ú ¿©ÀüÈ÷ ¡®¹Ùº¸¡¯¶ó´Â ¹®ÀÚ¿­ÀÌ ³²¾Æ ÀÖÀ¸¹Ç·Î WRAP ¿É¼ÇÀÌ ÄÑÁø »óÅ¿¡¼­´Â ¹«ÇÑ·çÇÁ¿¡ ºüÁ® ¹ö¸± °ÍÀÌ´Ù. ±×·¡¼­ ¸ðµÎ ¹Ù²Ù±â¸¦ ÇÒ ¶§´Â »ç¿ëÀÚ°¡ Á¤ÇÑ ¿É¼ÇÀ» Àá½Ã ¹«½ÃÇÏ°í ¹®¼­ ÇöÀç À§Ä¡¿¡¼­ºÎÅÍ ³¡±îÁö ÇÑ ¹ø¸¸ ¹Ù²Ù±â¸¦ ¼öÇàÇØ¾ß ÇÑ´Ù.

ÇϳªÀÇ ¹®ÀÚ¿­ÀÌ ´ëüµÉ ¶§¸¶´Ù UpdateWindow ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¹®¼­ÀÇ ¾îµðÂëÀ» ¹Ù²Ù°í ÀÖ´Â ÁßÀÎÁö¸¦ º¸¿©ÁÖµµ·Ï ÇÏ¿´´Ù. ÀÌ·¸°Ô ÇÏ¸é ¼Óµµ´Â ¸¹ÀÌ ´À·ÁÁöÁö¸¸ »ç¿ëÀÚ¿¡°Ô ¹®¼­º¯°æ »ç½ÇÀ» È®½ÇÇÏ°Ô º¸¿© Áشٴ Á¡¿¡¼­ ±àÁ¤ÀûÀÌ´Ù. ÇÏÁö¸¸ ¹®¼­ Å©±â°¡ Ä¿Áö¸é ÇÑ ´Ü¾î¸¦ ¹Ù²Ü ¶§¸¶´Ù ÀçÁ¤·ÄÀ» ÇϹǷΠÀÌ·² ¶§´Â UpdateWindow¸¦ ÇÏÁö ¾Ê´Â °ÍÀÌ ´õ ÁÁ´Ù. ÀÌ Ã³¸®´Â ¿É¼ÇÀ¸·Î ¸¸µé¾î µÑ¸¸Çϱ⵵ Çѵ¥ ¿©±â¿¡ ¿Ö UpdateWindow°¡ ÇÊ¿äÇÑÁö´Â Àá½Ã ÈÄ ¶Ç ¿¬±¸Çغ¸ÀÚ.

¸ðµÎ ¹Ù²Ù±â´Â Àüü °úÁ¤ÀÌ ÇϳªÀÇ ÆíÁý µ¿ÀÛÀ̹ǷΠÆíÁý ±×·ìÀ» ±¸¼ºÇÏ°í ÀÖ´Ù. ReplaceText ÇÔ¼ö ³»ºÎ¿¡¼­µµ ÆíÁý ±×·ìÀ» ±¸¼ºÇÏ°í ÀÖÁö¸¸ ApiEdit´Â ÆíÁý ±×·ìÀÇ ÁßøÀ» Çã¿ëÇϹǷΠ¾ÈÂÊ ±×·ìÀº ¹«½ÃµÈ´Ù. ¸ðµÎ ¹Ù²Û ÈÄ ´Ü ÇÑ ¹øÀÇ <Ctrl+Z>·Î ¸ðµÎ ¹Ù²Ù±â Ãë¼Ò¸¦ ÇÒ ¼ö ÀÖÀ¸´Ï Âü ¸ÚÁø ÀÏÀÌ´Ù. ¾Õ Àå¿¡¼­ Èûµé°Ô ÆíÁý ±×·ìÀ» ¸¸µé¾î ³õÀº ´öÅÃÀÌ´Ù.

±âº»ÀûÀΠã±â/¹Ù²Ù±â ±â´ÉÀÌ ¿Ï¼ºµÇ¾ú´Ù. ´ÙÀ½ ÄÚµå´Â ¹®¼­ ºÐ¼® Á¤º¸¸¦ »èÁ¦ÇÏ´Â ÇÔ¼öÀÌ´Ù. ÇÑÂü Àü¿¡ ½Ç½ÀÇÑ ÇÔ¼öÀε¥ ¿Ö °©ÀÚ±â ÀÌ ÇÔ¼ö¸¦ ´Ù½Ã º¸´Â°¡ ÇÏ¸é ¹Ù²Ù±â ±â´É°ú °ü·ÃÀÌ Àֱ⠶§¹®ÀÌ´Ù.

 

void CParse::DeleteParseInfo(int nLine)

{

     int l;

 

     for (l=nLine;;l++) {

          if (l>=ParseSize || pInfo[l].pUnit[0].pos == -1)

              break;

 

          memset(pInfo[l].pUnit,-1,sizeof(ParseUnit)*pInfo[l].UnitSize);

     }

}

 

ÀÌ ÇÔ¼ö´Â ºÐ¼® Á¤º¸°¡ ÀÛ¼ºµÇ¾î ÀÖ´Â ¸ðµç ÇàÀÇ pUnitÀ» ÃʱâÈ­ÇÔÀ¸·Î½á ºÐ¼® Á¤º¸¸¦ ¹«È¿È­ÇÑ´Ù. ºÐ¼® Á¤º¸ ¹è¿­ Á¦ÀÏ ³¡ÁÙÀÇ Ã¹ À¯´ÖÀº Ç×»ó pos°¡ -1À̱⠶§¹®¿¡ ÀÌ Á¶°Ç¸¸À¸·Î ºÐ¼®µÈ ³¡ ÁÙÀ» ãÀ» ¼ö Àִµ¥ ·çÇÁ¸¦ Å»ÃâÇÒ Á¶°Ç¿¡ l>=ParseSizeÁ¶°ÇÀÌ ÇÊ¿äÇÑ ÀÌÀ¯´Â ¹«¾ùÀϱî? È­¸é¿¡ ÇÑ ¹øÀÌ¶óµµ Ãâ·ÂµÈ ÁÙ¿¡ ´ëÇؼ­´Â ºÐ¼® Á¤º¸ ¹è¿­ÀÌ ÇÒ´çµÇ¾î ÀÖÀ¸¹Ç·Î »ç½Ç ´ëºÎºÐÀÇ °æ¿ì ÀÌ Á¶°ÇÀº ÇÊ¿ä°¡ ¾ø´Ù.

¾ÆÁÖ Æ¯¼öÇÑ °æ¿ì ¾ÆÁ÷ ÇÒ´çµµ ¾ÈµÈ ÇàÀÇ ºÐ¼® Á¤º¸¸¦ »èÁ¦ÇØ¾ß ÇÒ °æ¿ì°¡ Àִµ¥ ¹Ù·Î ¸ðµÎ ¹Ù²Ù±â¸¦ ÇÒ ¶§ÀÌ´Ù. ¸ðµÎ ¹Ù²Ù±â´Â ¸Þ¸ð¸®¸¸ º¯°æÇÏÁö È­¸éÀ» ±×¸®Áö ¾ÊÀ¸¹Ç·Î OnPaint°¡ È£ÃâµÇÁö ¾Ê°í µû¶ó¼­ ºÐ¼® Á¤º¸°¡ °»½ÅµÇÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ UpdateLineInfo ÇÔ¼ö´Â ¹Ýº¹ÀûÀ¸·Î È£ÃâµÇ¹Ç·Î ÀÌ ÇÒ´çµÇÁö ¾Ê´Â ÇàÀÇ ºÐ¼® Á¤º¸¸¦ Áö¿ì·Á°í ½ÃµµÇÏ°Ô µÈ´Ù. l>=ParseSize Á¶°ÇÀº ÀÌ·± »óȲÀÏ ¶§¸¦ À§ÇÑ Ãß°¡µÈ °ÍÀÌ¸ç ¸ðµÎ ¹Ù²Ù±â¿¡ UpdateWindow È£ÃâÀÌ ÀÖ´Â ÀÌÀ¯´Â ¹Ù²Ù±â¸¦ ÇÑ ¸ðµç ÁÙ¿¡ ºÐ¼® Á¤º¸¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇسõ±â À§Çؼ­ÀÌ´Ù.