³ª. ¹®ÀÚ¿­ °Ë»ö

°Ë»öÀÇ ´ë»óÀº ¿­¸° ¹®¼­ÀÌ¸ç ¹®¼­¿¡ ´ëÇÑ ¸ðµç Á¤º¸´Â ApiEdit°¡ °¡Áö°í ÀÖ´Ù. µû¶ó¼­ ¹®ÀÚ¿­ °Ë»öÀÇ ÁÖü´Â È£½ºÆ®°¡ ¾Æ´Ñ CApiEdit °´Ã¼¿©¾ß ÇÑ´Ù. ApiEdit.cpp¿¡ ¹®ÀÚ¿­À» °Ë»öÇÏ´Â ´ÙÀ½ ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ApiEdit.h¿¡ ÀÌ ÇÔ¼öÀÇ ¿øÇüÀ» ±â·ÏÇÑ´Ù.

 

TCHAR *FindString(TCHAR *buf, int nPos, TCHAR* what,BOOL bDown, BOOL bCase)

{

     TCHAR *pWhat;

     int nOff;

     TCHAR *pResult;

     BOOL bFind;

     int Inc;

     int len;

     TCHAR ch;

 

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

     lstrcpy(pWhat,what);

     if (bCase==FALSE) {

          CharUpper(pWhat);

     }

     len=lstrlen(pWhat);

 

     if (bDown) {

          Inc=1;

     } else {

          Inc=-1;

     }

 

     for (;;nPos+=Inc) {

          if (buf[nPos]==0 || nPos<0) {

              pResult=NULL;

              break;

          }

 

          bFind=TRUE;

          for (nOff=0;nOff<len;nOff++) {

              if (bCase) {

                   ch=buf[nPos+nOff];

              } else {

                   ch=toupper(buf[nPos+nOff]);

              }

 

              if (ch!=pWhat[nOff]) {

                   bFind=FALSE;

                   break;

               }

          }

 

          if (bFind==TRUE) {

              pResult=buf+nPos;

              break;

          }

     }

 

     free(pWhat);

     return pResult;

}

 

ÀÌ ÇÔ¼ö´Â bufÀÇ nPos¿¡¼­ what ¹®ÀÚ¿­ÀÌ ÀÖ´Â À§Ä¡¸¦ ã¾Æ ¸®ÅÏÇ쵂 ¹®ÀÚ¿­ÀÌ ¹ß°ßµÇÁö ¾ÊÀ¸¸é NULLÀ» ¸®ÅÏÇÑ´Ù. bDownÀº ¾Æ·¡/À§ °Ë»ö ¹æÇâÀ» ÁöÁ¤Çϸç bCase´Â ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿©ºÎ¸¦ ÁöÁ¤ÇÑ´Ù. Ç¥ÁØ C ÇÔ¼ö Áß¿¡ ¹®ÀÚ¿­ ¹öÆÛ¿¡¼­ ¿øÇÏ´Â ¹®ÀÚ¿­ÀÇ À§Ä¡¸¦ Á¤È®ÇÏ°Ô Ã£¾Æ ÁÖ´Â strstrÀ̶ó´Â ÇÔ¼ö°¡ ÀÖÁö¸¸ ÀÌ ÇÔ¼ö´Â ´ë¼Ò¹®ÀÚ ±¸ºÐ ¹«½Ã, ¿ª¹æÇâ °Ë»öÀº Áö¿øÇÏÁö ¾Ê´Â´Ù. strrstr ÇÔ¼ö¿Í strstri, strrstri ÇÔ¼ö°¡ Áö¿øµÈ´Ù¸é ±»ÀÌ ÀÌ ÇÔ¼ö°¡ ÇÊ¿ä¾ø°ÚÁö¸¸ ±×·± ÇÔ¼ö°¡ ¾øÀ¸´Ï Á÷Á¢ ¸¸µé¾î ¾µ ¼ö¹Û¿¡ ¾ø´Ù.

º¸´Ù½ÃÇÇ ÀÌ ÇÔ¼ö´Â CApiEditÀÇ ¸â¹öÇÔ¼ö°¡ ¾Æ´Ñ ÀϹÝÇÔ¼ö·Î Á¤ÀǵǾî ÀÖ´Ù. ÀÌ ÇÔ¼ö°¡ ¸â¹ö°¡ µÉ ¼ö ¾ø´Â ÀÌÀ¯´Â È£½ºÆ®µµ ÆÄÀÏ°Ë»öÀ» À§ÇØ ¹®ÀÚ¿­ °Ë»ö ÇÔ¼ö¸¦ ÇÊ¿ä·Î Çϱ⠶§¹®ÀÌ´Ù. º¹¼ö °³ÀÇ ÆÄÀÏÀ» °Ë»öÇÒ ¶§ ApiEdit °´Ã¼¿¡ ÀÏÀÏÀÌ ÅؽºÆ®¸¦ ³Ö°í Á¤·ÄÇÑ ÈÄ °Ë»öÇÏÀÚ¸é ³Ê¹« ´À·ÁÁö±â ¶§¹®¿¡ ÆÄÀϸ¸ ÀÐÀº »óÅ¿¡¼­ ¹öÆÛ¸¦ ¹Ù·Î µÚÁ®¾ß ÇÑ´Ù. ±×·¯±â À§Çؼ­ ÀÌ ÇÔ¼ö´Â ApiEdit¿Í ³í¸®ÀûÀÎ »ó°üÀÌ ¾ø´Â ÀϹÝÇÔ¼ö°¡ µÇ¾î¾ß ÇÑ´Ù.

ÀÌ·± ÀϹÝÀûÀÎ ¸ñÀûÀÇ ÇÔ¼ö¶ó¸é Util.cpp¿¡ ÀÛ¼ºÇÒ ¼öµµ ÀÖÁö¸¸ ±×·¸°Ô µÇ¸é ApiEdit°¡ µ¶¸³¼ºÀ» ÀÒ¾î¹ö¸®°Ô µÈ´Ù. Util ¸ðµâÀº ´ç±ÙÀÇ °ÍÀÌÁö ApiEditÀÇ °ÍÀÌ ¾Æ´Ï´Ù. ¹Ý´ë·Î ApiEdit ¸ðµâ¿¡ ÀÌ ÇÔ¼ö¸¦ ÀϹÝÇÔ¼ö·Î ÀÛ¼ºÇسõ°í ¿øÇü¸¸ °ø°³Çϸé Dangeunµµ ÀÌ ÇÔ¼ö¸¦ ÀÚÀ¯·Ó°Ô ¾µ ¼ö ÀÖ°í ApiEditµµ µ¶¸³¼ºÀ» ÀÒÁö ¾Ê´Â´Ù. DangeunÀº ¿ø·¡ºÎÅÍ ApiEdit¿¡ Á¾¼ÓÀûÀ̹ǷΠ¹®Á¦µÉ °ÍÀÌ ¾ø´Ù. Á» ´õ Çü½Ä¼ºÀ» µûÁöÀÚ¸é ÀÌ ÇÔ¼ö´Â CApiEdit Ŭ·¡½ºÀÇ Á¤Àû ¸â¹ö°¡ µÇ´Â °Íµµ ³ª»ÚÁö ¾ÊÁö¸¸ CApiEdit¿Í Á÷Á¢ÀûÀÎ ¿¬°ü¼ºÀÌ ¾ø¾î ±×·¸°Ô ÇÏÁö ¾Ê¾Ò´Ù.

ÇÔ¼ö ¼±µÎ¿¡¼­´Â °Ë»ö ·çÇÁ¸¦ °£´ÜÇÏ°Ô ¸¸µé±â À§ÇÑ µÎ °¡Áö ¿¹ºñ µ¿ÀÛÀ» ÇÑ´Ù. ù ¹ø° ¿¹ºñ µ¿ÀÛÀº ´ë¼Ò¹®ÀÚ ±¸ºÐ ¹«½Ã ¿É¼ÇÀÌ ÁÖ¾îÁ³À» ¶§(bCase==FALSE) °Ë»ö ´ë»ó ¹®ÀÚ¿­À» ¸ðµÎ ´ë¹®ÀÚ·Î ¹Ù²Ù¾î ³õ´Â °ÍÀÌ´Ù. ´ë¼Ò±¸ºÐ¾øÀÌ µÎ °³ÀÇ ¹®ÀÚ°¡ °°ÀºÁö ºñ±³ÇÏ·Á¸é ´ë´ë, ´ë¼Ò, ¼Ò´ë, ¼Ò¼Ò 4°¡Áö ÄÉÀ̽º¸¦ ºñ±³ÇÑ ÈÄ ³í¸®ÇÕÀ» ÃëÇØ¾ß Çϴµ¥ ¹®ÀÚ ¼ö°¡ ¸¹¾ÆÁö¸é ÀÌ Á¶ÇÕÀÌ ±âÇÏ ±Þ¼öÀûÀ¸·Î ´Ã¾î³ª ¹ö¸°´Ù. ±×·¡¼­ ºñ±³¸¦ ´Ü¼øÇÏ°Ô Çϱâ À§ÇØ ¸ðµÎ ´ë¹®ÀÚ·Î ¹Ù²Û ÈÄ ºñ±³Çϵµ·Ï Çß´Ù.

¹°·Ð ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÑ´Ù¸é(bCase==TRUE) ´ë¹®ÀÚ·Î ¹Ù²Ù¾î ³õÀ» ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ ¿É¼Ç ¿©ºÎ¿¡ µû¶ó pWhat ¹öÆÛ´Â whatÀÇ »çº»À» °¡ÁöµçÁö ¾Æ´Ï¸é whatÀ» ´ë¹®ÀÚÈ­ÇÑ ¹®ÀÚ¿­À» °¡Áö°Ô µÉ °ÍÀÌ´Ù. ÀÌÈÄ °Ë»ö ·çÇÁ¿¡¼­´Â Àμö·Î Àü´ÞµÈ whatÀ» ã´Â °ÍÀÌ ¾Æ´Ï¶ó ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿É¼ÇÀ» ÀÌ¹Ì Àû¿ëÇÑ pWhatÀ» ã°Ô µÈ´Ù. °Ë»ö ¹®ÀÚ¿­ÀÇ ±æÀ̵µ ·çÇÁ¿¡¼­ Á¾Á¾ Âü°íµÇ¹Ç·Î len º¯¼ö¿¡ ¹Ì¸® ±æÀ̸¦ Á¶»çÇصξú´Ù.

µÎ ¹ø° ¿¹ºñ µ¿ÀÛÀº Inc º¯¼ö¿¡ °Ë»öÀÇ ¹æÇâÀ» ¹Ì¸® °è»êÇسõ´Â °ÍÀÌ´Ù. ¾Æ·¡·Î °Ë»öÀ̸é ÀÌ °ª¿¡ 1À» ´ëÀÔÇÏ¿© nPos¸¦ Áõ°¡½ÃÄÑ °¡¸ç °Ë»öÀ» ÁøÇàÇÏ°í À§·Î °Ë»öÀ̸é ÀÌ °ª¿¡ -1À» ´ëÀÔÇÏ¿© nPos¸¦ °¨¼ÒÇϸ鼭 °Ë»öÇÏ¸é µÈ´Ù. Inc´Â °Ë»ö ·çÇÁ¿¡¼­ nPos¸¦ Áõ°¨½ÃÅ°´Â °ªÀ¸·Î »ç¿ëµÇ´Âµ¥ ¹Ì¸® ÀÌ °ªÀ» °è»êÇØ µÒÀ¸·Î½á °Ë»ö ·çÇÁ¿¡¼­´Â bDown Àμö¿¡ ´ëÇÑ °í·Á´Â ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. Inc º¯¼ö´Â bDown¿É¼ÇÀ» ·çÇÁ¿¡¼­ ¹Ù·Î ¾µ ¼ö ÀÖ´Â ÇüÅ·Π°¡°øÇÑ °ÍÀ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù.

for ·çÇÁ´Â nPos¿¡¼­ºÎÅÍ ½ÃÀÛÇÏ¿© Inc ¹æÇâÀ¸·Î ¹«ÇÑ·çÇÁ¸¦ µ¹¸ç pWhat ¹®ÀÚ¿­À» °Ë»öÇÑ´Ù. ÀÌ ·çÇÁ¸¦ ºüÁ® ³ª¿À´Â Å»Ãâ Á¶°ÇÀº µÑ Áß ÇϳªÀÌ´Ù. ù ¹ø°´Â ¹öÆÛÀÇ ³¡À̳ª óÀ½¿¡ À̸¦ ¶§±îÁö ¿øÇÏ´Â ¹®ÀÚ¿­À» ãÁö ¸øÇßÀ» ¶§ÀÌ¸ç µÎ ¹ø°´Â ¼º°øÀûÀ¸·Î ãÀº °æ¿ìÀÌ´Ù. °Ë»ö¿¡ ½ÇÆÐÇßÀ» ¶§´Â pResult¿¡ NULLÀ» ´ëÀÔÇÏ°í ¼º°øÇßÀ» ¶§´Â ãÀº ¹øÁö¸¦ ´ëÀÔÇÏ¿´´Ù.

ÇöÀç nPos À§Ä¡¿¡ pWhat ¹®ÀÚ¿­ÀÌ ÀÖ´ÂÁö´Â ¾ÈÂÊ for (nOff) ·çÇÁ¿¡¼­ °Ë»çÇÑ´Ù. ÀÏ´Ü for (nOff)·çÇÁ¿¡ µé¾î°¡±â Àü¿¡ bFind¸¦ TRUE·Î ÃʱâÈ­ÇÏ°í buf[nPos]¸¦ º£À̽º·Î ÇÑ ¹®ÀÚ¿­°ú pWhat ¹®ÀÚ¿­À» ÀÏ´ëÀÏ·Î ¸ðµÎ ºñ±³ÇØ º»´Ù. ÀÌ Áß Çϳª¶óµµ Ʋ¸° °ÍÀÌ ¹ß°ßµÇ¸é nPos À§Ä¡¿¡´Â pWhatÀÌ ¾øÀ¸¸ç bFind´Â FALSE°¡ µÈ´Ù. ¹Ù±ùÂÊ for ·çÇÁ´Â ´ÙÀ½ nPos À§Ä¡·Î ÁøÇàÇÏ´Â Inc °ª¿¡ µû¶ó ¾ÕÀ̳ª µÚ·Î nPos¸¦ À̵¿½ÃŲ ÈÄ °è¼Ó ºñ±³Çϱ⸦ ¹Ýº¹ÇÑ´Ù.

ºñ±³ ·çƾ¿¡´Â bCase Á¶°ÇÀÌ Æ÷ÇԵǾî Àִµ¥ ´ë¼Ò¹®ÀÚ ±¸ºÐ »óÅÂÀ̸é buf¿¡¼­ ÀÐÀº °ª°ú pWhatÀÇ ´ëÀÀµÇ´Â °ªÀ» ¹Ù·Î ºñ±³ÇÏ°í ´ë¼Ò¹®ÀÚ ¹«½Ã »óÅÂÀ̸é buf¿¡¼­ ÀÐÀº °ªÀ» ´ë¹®ÀÚ·Î ¸¸µç ÈÄ ºñ±³ÇÏ¿´´Ù. ¸¸¾à dog¸¦ ´ë¼Ò¹®ÀÚ ±¸ºÐ¾øÀÌ °Ë»öÇÑ´Ù¸é pWhatÀº ¡®DOG¡¯°¡ µÇ¸ç º»¹® Áß¿¡ ¡®Dog¡¯ ¹®ÀÚ¿­Àº ºñ±³ÇÒ ¶§ D, O, G·Î º¯È¯µÈ ÈÄ ºñ±³µÉ °ÍÀÌ´Ù.

ÀÌ·± ½ÄÀ¸·Î ¹Ù±ùÂÊ for ·çÇÁ´Â °Ë»ö¿¡ ¼º°øÇϰųª ¿ÏÀüÈ÷ ½ÇÆÐÇÒ ¶§±îÁö ¹Ýº¹À» °è¼ÓÇÏ¸ç ±× °á°ú¸¦ pResult¿¡ ´ëÀÔÇÑ´Ù. °Ë»ö ´ë»ó ¹®ÀÚ¿­ÀÇ »çº»ÀÎ pWhatÀ» ÇØÁ¦ÇÑ ÈÄ pResult¸¦ ¸®ÅÏÇϸé ÀÌ ÇÔ¼ö´Â Á¾·áµÈ´Ù. ÀÌ ÇÔ¼öÀÇ ³í¸®´Â ¾ÆÁÖ Á÷¼±ÀûÀÌ°í ´Ü¼øÇϱ⠶§¹®¿¡ ÀÌÇØÇϱ⠽¬¿ï °ÍÀÌ´Ù. ¸¸¾à ·çÇÁ ±¸Á¶°¡ Á¶±Ý º¹ÀâÇؼ­ ¾ó¸¥ ÀÌÇØ°¡ µÇÁö ¾Ê´Â´Ù¸é µð¹ö°Å·Î µ¿ÀÛÀ» »ìÆ캸±â ¹Ù¶õ´Ù.

±¸Á¶°¡ °£´ÜÇÑ ´ë½Å ¼Óµµ´Â Á» ´À¸° ÆíÀε¥ Á» ´õ È¿À²À» ³ôÀÌ°íÀÚ ÇÑ´Ù¸é °ø°³µÈ °Ë»ö ¾Ë°í¸®ÁòÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹®ÀÚ¿­ °Ë»ö ¾Ë°í¸®ÁòÀº ÇؽÃ, Á¡È­½Ä »ç¿ë µî ¸î °¡Áö ¾Ë°í¸®ÁòµéÀÌ ÀÌ¹Ì °³¹ßµÇ¾î ÀÖ¾î ÀÌ ¾Ë°í¸®Áò¸¸ ¼öÁ¤Çصµ ´«¿¡ ¶ç°Ô ¼Óµµ°¡ Áõ°¡ÇÒ °ÍÀÌ´Ù. ÇÏÁö¸¸ ¿©±â¼­´Â ¼º´Éº¸´Ù ´Ü¼øÇÔÀ» À§ÇØ ÀÏ´Ü ÀÌ ¼öÁØ¿¡¼­ ¸¸Á·Çϱâ·Î ÇÑ´Ù. ¾îÂ÷ÇÇ ´ÙÀ½¿¡ Á¤±Ô½Ä(Regular Expression)±îÁö Áö¿øÇÏ·Á¸é ´ë´ëÀûÀÎ ±¸Á¶ Á¶Á¤À» ÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù.

´ë¼Ò¹®ÀÚ ±¸ºÐ°ú °Ë»ö ¹æÇâÀº FindString À¯Æ¿¸®Æ¼ ÇÔ¼ö°¡ ó¸®ÇϹǷΠApiEdit´Â µÇµ¹¸®±â, ´Ü¾î ´ÜÀ§·Î µîÀÇ ³ª¸ÓÁö ¿É¼ÇµéÀ» ó¸®ÇÏ´Â °Ë»ö ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù. ÀÌ ÇÔ¼ö´Â Àü¿ª ¹öÆÛ¸¦ ´ë»óÀ¸·Î °Ë»öÇϹǷΠCApiEditÀÇ ¸â¹ö·Î Æ÷ÇԵȴÙ. ´ÙÀ½°ú °°ÀÌ ÇÔ¼ö¸¦ ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ.

 

BOOL CApiEdit::FindText(int nPos, TCHAR *what, DWORD dwFlag)

{

     int nStart;

     TCHAR *pFound;

     BOOL bWrap;

 

     if (nPos == -1) {

          if (SelStart==SelEnd) {

              nStart=off;

          } else {

              if (dwFlag & AE_FIND_UP) {

                   nStart=min(SelStart,SelEnd);

              } else {

                   nStart=max(SelStart,SelEnd);

              }

          }

     } else {

          nStart=nPos;

     }

 

     bWrap=((dwFlag & AE_FIND_WRAP)!=0);

     if (dwFlag & AE_FIND_UP) {

          nStart=nStart-lstrlen(what);

          if (nStart<0) {

              if (bWrap) {

                   bWrap=FALSE;

                   nStart=max(0,doclen-1);

              } else {

                   return FALSE;

              }

          }

     }

 

     for (;;) {

          pFound=FindString(buf,nStart,what,(dwFlag & AE_FIND_UP)==0,

              (dwFlag & AE_FIND_MATCHCASE)!=0);

          if (pFound) {

              if (dwFlag & AE_FIND_WHOLEWORD) {

                   if ((pFound==buf || IsDelimiter(pFound-buf-1)) &&

                        IsDelimiter(pFound-buf+lstrlen(what))) {

                        break;

                   } else {

                        if (dwFlag & AE_FIND_UP) {

                            nStart=pFound-buf-1;

                        } else {

                            nStart=pFound-buf+lstrlen(what);

                        }

                        continue;

                   }

              }

              break;

          }

 

          if (bWrap) {

              bWrap=FALSE;

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

                   nStart=0;

              } else {

                   nStart=max(0,doclen-1);

              }

              continue;

          }

          break;

     }

 

     if (pFound) {

          SetSelect(pFound-buf,pFound-buf+lstrlen(what));

          return TRUE;

     }

     return FALSE;

}

 

¼¼ °³ÀÇ Àμö¸¦ ¹Þ¾ÆµéÀ̴µ¥ nPos´Â °Ë»öÀ» ½ÃÀÛÇÒ ¿ÀÇÁ¼ÂÀÌ°í whatÀº °Ë»ö ¹®ÀÚ¿­, dwFlag´Â °Ë»ö ¿É¼ÇÀÌ´Ù. nPos°¡ -1ÀÏ °æ¿ì´Â ÇöÀç À§Ä¡¿¡¼­ °Ë»öÀ» ½ÃÀÛÇϴµ¥ ¿©±â¼­ ÇöÀç À§Ä¡´Â ¼±Åÿµ¿ª À¯¹«¿Í °Ë»ö ¹æÇâ¿¡ µû¶ó ´Þ¶óÁø´Ù. ¼±Åÿµ¿ªÀÌ ¾ø´Ù¸é ´ç¿¬È÷ off°¡ ÇöÀç À§Ä¡°¡ µÇÁö¸¸ ¼±Åÿµ¿ªÀÌ ÀÖ´Ù¸é ¹æÇâ¿¡ µû¶ó ¼±ÅÃÀÇ ½ÃÀÛÁ¡À̳ª ³¡Á¡ÀÌ °Ë»ö ½ÃÀÛÁ¡ÀÌ µÇ¾î¾ß ÇÑ´Ù.

°Ë»ö ¹æÇâÀÌ À§ÂÊÀÏ ¶§´Â ÀÌ¿Ü¿¡ ÇÑ °¡Áö Á¶°ÇÀÌ ´õ ÇÊ¿äÇѵ¥ ¹ß°ßµÈ ¹®ÀÚ¿­Àº Àû¾îµµ ÇöÀç À§Ä¡º¸´Ù´Â ´õ ¾ÕÂÊ¿¡ ÀÖ¾î¾ß ÇÑ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.

ÀÌ ¹®Àå¿¡´Â µÎ °³ÀÇ Korea ¹®ÀÚ¿­ÀÌ Àִµ¥ µÎ ¹ø° KÀ§Ä¡¿¡¼­ ¾ÕÂÊÀ¸·Î Korea¸¦ ãµµ·Ï Çß´Ù. À̶§ °Ë»ö ½ÃÀÛÀ§Ä¡¿¡¼­ ¹Ù·Î Korea°¡ ¹ß°ßµÇ¾úÀ¸¹Ç·Î µÎ ¹ø° Korea°¡ ¼±ÅÃµÉ °ÍÀÌ´Ù. ¸Â´Â °Í °°Áö¸¸ ÀÌ·¸°Ô ÇÏ¸é ¾ÈµÈ´Ù. ÀÌ »óÅ¿¡¼­ ´Ù½Ã ¾ÕÂÊÀ¸·Î ã±â¸¦ ½ÇÇàÇÏ¸é °è¼Ó ±× ÀÚ¸®¿¡ ÀÖ´Â °ÍÀÌ ¸Â´ÂÁö ¾Æ´Ï¸é ´Ù¸¥ Korea¸¦ ã¾Æ ¾ÕÂÊÀ¸·Î °¡´Â °ÍÀÌ ¸Â´ÂÁö »ý°¢Çغ¸¶ó. ¾ÕÂÊÀ¸·Î °¡´Â °ÍÀÌ ¿Ç´Ù.

±×·¸´Ù¸é À̹ø¿¡´Â Á¶±Ý ´Ù¸¥ °æ¿ì¸¦ »ý°¢Çغ¸ÀÚ. µÎ ¹ø° KoreaÀÇ rÀ§Ä¡¿¡¼­ ¾ÕÂÊÀ¸·Î ã±â¸¦ ½ÇÇàÇßÀ» ¶§´Â ¾î¶² Korea¸¦ °Ë»öÇÏ´Â °ÍÀÌ ¸ÂÀ»±î? Àû¾îµµ ÇöÀç À§Ä¡º¸´Ù´Â ¾ÕÂÊÀ¸·Î À̵¿ÇßÀ¸¹Ç·Î µÎ ¹ø° Korea¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ¸Â´Â °Í °°±âµµ ÇÏ°í °Ë»ö°á°ú ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ ÇöÀç À§Ä¡º¸´Ù µÚÂÊ¿¡ °ÉÄ¡±â ¶§¹®¿¡ ù ¹ø° Korea¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ÁÁ¾Æ º¸À̱⵵ ÇÑ´Ù. Á¤´äÀº ÀÌ °æ¿ìµµ ù ¹ø° Korea¸¦ ã´Â °ÍÀÌ ¸Â´Ù. ¿Ö³ÄÇÏ¸é »ç¿ëÀÚ´Â Korea ´Ü¾îÀÇ Áß°£¿¡¼­ À§·Î ã±â ¸í·ÉÀ» ³»·È´Âµ¥ ÀÌ´Â Áö±Ý ºþÈ÷ º¸°í ÀÖ´Â ´Ü¾î°¡ Korea°¡ ¸Â´ÂÁö¸¦ ¹¯´Â °ÍÀÌ ¾Æ´Ï°í ÀÌ ´Ü¾î¿Í °°Àº ¾ÕÂÊÀÇ ´Ù¸¥ ´Ü¾î¸¦ ¿øÇÑ °ÍÀ̱⠶§¹®ÀÌ´Ù.

±×·¡¼­ °Ë»ö ½ÃÀÛÀ§Ä¡¸¦ ÀÏ´Ü °è»êÇÑ ÈÄ À§·Î °Ë»ö ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ» ¶§´Â °Ë»ö ½ÃÀÛÀ§Ä¡¿¡¼­ °Ë»ö ¹®ÀÚ¿­ÀÇ ±æÀ̸¸Å­ ¾ÕÂÊÀ¸·Î À̵¿ÇÏ¿´´Ù. ¾ÆÁÖ Æ¯¼öÇÑ °æ¿ì·Î ÀÌ Á¶Á¤¿¡ ÀÇÇØ ¹öÆÛ ¾ð´õ·±ÀÌ ¹ß»ýÇßÀ¸¸é µÇµ¹¾Æ°¡±â(bWrap) ¿É¼Ç¿¡ µû¶ó ¹®¼­ ³¡À¸·Î °¡µçÁö ¾Æ´Ï¸é °Ë»ö¿¡ ½ÇÆÐÇÑ´Ù. °Ë»ö ½ÃÀÛÀ§Ä¡ nStart°¡ °áÁ¤µÇ¸é ´ÙÀ½ ÇÔ¼ö È£Ãâ·Î °Ë»öÀ» ÇÑ´Ù.

 

          pFound=FindString(buf,nStart,what,(dwFlag & AE_FIND_UP)==0,

              (dwFlag & AE_FIND_MATCHCASE)!=0);

 

¾Õ¿¡¼­ ÀÛ¼ºÇسõÀº FindString À¯Æ¿¸®Æ¼ ÇÔ¼ö¸¦ È£ÃâÇÏ¿´À¸¸ç °Ë»ö ¿É¼Ç Áß ¹æÇâ°ú ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿É¼ÇÀ» Àμö·Î Àü´ÞÇÏ¿© ÀÌ¹Ì Àû¿ëÇÏ¿´´Ù. ÀÌ ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â pFoundÀÇ °á°ú°¡ °ð ÀÏÂ÷ÀûÀÎ °Ë»ö°á°ú°¡ µÈ´Ù. ¾îµð±îÁö³ª ÀÏÂ÷ÀûÀÎ °Ë»ö°á°úÀÏ »ÓÀ̹ǷΠÁ¦´ë·Î ã¾Ò´ÂÁö ¶Ç´Â È®½ÇÈ÷ ½ÇÆÐÇÑ °ÍÀÎÁö¸¦ ´õ Á¡°ËÇØ ºÁ¾ß ÇÏ¸ç µû¶ó¼­ FindString È£ÃâÀÌ for ¹«ÇÑ·çÇÁ·Î ½Î¿©Á® ÀÖ´Ù. ÀÌ ·çÇÁ´Â È®½ÇÈ÷ ¼º°øÇ߰ųª ¾Æ´Ï¸é ¿ÏÀüÈ÷ ½ÇÆÐÇÒ ¶§±îÁö ¹Ýº¹µÈ´Ù.

¿ì¼± °Ë»ö¿¡ ¼º°øÇÑ °æ¿ì¸¦ º¸ÀÚ. ÀÏ´Ü ¼º°øÇß´õ¶óµµ ´Ü¾î´ÜÀ§·Î ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é °Ë»öµÈ À§Ä¡ÀÇ ¹®ÀÚ¿­ÀÌ °ú¿¬ ´Ü¾î°¡ ¸Â´ÂÁö È®ÀÎÇÑ´Ù. °Ë»ö ¹®ÀÚ¿­ÀÇ ¾ÕµÚ·Î ±¸ºÐÀÚ°¡ ÀÖÀ¸¸é ´Ü¾î¸¦ Á¦´ë·Î ãÀº °ÍÀÌ°í ±×·¸Áö ¾Ê´Ù¸é ¾ÆÁ÷ ãÁö ¸øÇÑ °ÍÀ̹ǷΠnStart¸¦ ´ÙÀ½ À§Ä¡·Î ¿Å±ä ÈÄ °è¼Ó °Ë»öÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î api¸¦ ãÀ¸¶ó°í Çߴµ¥ winapi³ª rapid µîÀÇ ºÎºÐ ¹®ÀÚ¿­À» ã¾Ò´Ù¸é À߸ø ãÀº °ÍÀÌ´Ù. ´Ü¾î ´ÜÀ§·Î ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÁö ¾ÊÀ¸¸é ÀÏÂ÷ °Ë»ö°á°ú°¡ ±×´ë·Î ¼º°øÀ¸·Î ÀÎÁ¤µÈ´Ù.

°Ë»öµÈ À§Ä¡°¡ ´Ü¾î°¡ ¾Æ´Ò °æ¿ì À̵¿ÇÒ ´ÙÀ½ À§Ä¡´Â °Ë»ö ¹æÇâ¿¡ µû¶ó ´Þ¶óÁø´Ù. À§·Î °Ë»öÀ̾úÀ¸¸é nStart=pFound-buf-1 À§Ä¡ Áï, °Ë»öµÈ À§Ä¡º¸´Ù 1¹ÙÀÌÆ® ¾ÕÀ¸·Î À̵¿ÇÑ´Ù. À̶§ 1¹ÙÀÌÆ® ¾ÕÂÊÀÌ ÇѱÛÀÇ °æ°èÀÎÁö ¾Æ´ÑÁö´Â ½Å°æ¾µ ÇÊ¿ä°¡ ¾ø´Ù. ¿Ö³ÄÇÏ¸é ¹®ÀÚ¿­ °Ë»öÀ̶õ ¹ÙÀÌÆ® ´ÜÀ§·Î ºñ±³¸¦ ÇÏ´Â °ÍÀÌÁö ±ÛÀÚ ´ÜÀ§·Î ºñ±³¸¦ ÇÏ´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. pFound°¡ ¹®¼­ÀÇ ¼±µÎÀÏ ¶§ nStart´Â -1ÀÌ µÇ´Âµ¥ FindString ÇÔ¼ö¿¡¼­ ¿ÀÇÁ¼ÂÀÇ ÇÑ°è Á¡°ËÀ» ÇÏ°í Àֱ⠶§¹®¿¡ À½¼ö ¿ÀÇÁ¼ÂÀ» °¡¸®Å°´õ¶óµµ ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. ¾Æ·¡·Î °Ë»öÀ̾úÀ¸¸é °Ë»öµÈ À§Ä¡¿¡¼­ °Ë»ö ¹®ÀÚ¿­ ±æÀ̸¸Å­ µÚ·Î À̵¿ÇÏ¸é µÈ´Ù.

´ÙÀ½Àº °Ë»ö¿¡ ½ÇÆÐÇÑ °æ¿ì¸¦ º¸ÀÚ. ºñ·Ï ½ÇÆÐÇß´õ¶óµµ µÇµ¹¾Æ°¡±â ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖ´Ù¸é ¹®¼­ óÀ½À¸·Î(¶Ç´Â ³¡À¸·Î) µ¹¾Æ°¡ °Ë»öÀ» °è¼ÓÇØ¾ß ÇÑ´Ù. ¿ÀÇÁ¼Â 1234¿¡¼­ ¾Æ·¡·Î korea¸¦ ã±â ½ÃÀÛÇß´Ù¸é ¿ÀÇÁ¼Â 768¿¡ ÀÖ´Â korea´Â °Ë»öÇÏÁö ¸øÇßÀ» °ÍÀÌ´Ù. bWrap º¯¼ö´Â for ·çÇÁ¿¡ µé¾î¿À±â Àü¿¡ dwFlag¿¡¼­ µÇµ¹¾Æ°¡±â ¿É¼ÇÀÇ »óŸ¦ ´ëÀÔ¹Þ¾Ò´Ù. °Ë»ö¿¡ ½ÇÆÐÇß´õ¶óµµ ÀÌ °ªÀÌ TRUEÀÌ¸é ¹æÇâ¿¡ µû¶ó ¹®¼­ óÀ½À̳ª ³¡À¸·Î µ¹¾Æ°¡ ÇÑ ¹ø ´õ °Ë»öÇغ¸µµ·Ï ÇÑ´Ù.

´Ü, µÇµ¹¾Æ°¡±â ¿É¼ÇÀº µÎ ¹ø Àû¿ëµÉ ¼ö ¾øÀ¸¹Ç·Î ÇÑ ¹ø Àû¿ëÇÏÀÚ¸¶ÀÚ bWrapÀ» FALSE·Î ¹Ù²Ù¾î ³õ¾Æ ´ÙÀ½ ½ÇÆнÿ¡´Â Á¤¸»·Î ½ÇÆÐÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é for ·çÇÁ´Â Á¤¸»·Î ¹«ÇÑ·çÇÁ°¡ µÇ¾î ¹ö¸± °ÍÀÌ´Ù. FindString À¯Æ¿¸®Æ¼ ÇÔ¼ö°¡ °Ë»öÀÇ ÁÖ¿ä ±â´ÉÀ» Á¦°øÇϴµ¥µµ ºÒ±¸ÇÏ°í ÀÌ ÇÔ¼ö°¡ ±×¸® °£´ÜÇÏÁö°¡ ¾Ê´Ù. ¼ø¼­µµ·Î ÀÌ ÇÔ¼öÀÇ È帧À» Á¤¸®Çغ¸µµ·Ï ÇÏÀÚ.

FindText ÇÔ¼ö´Â °Ë»ö¿¡ ¼º°øÇßÀ» °æ¿ì °Ë»öµÈ ¹®ÀÚ¿­À» ºí·ÏÀ¸·Î ¼±ÅÃÇÏ°í TRUE¸¦ ¸®ÅÏÇÑ´Ù. SetSelect ÇÔ¼ö´Â SetCaretÀ» È£ÃâÇϸç SetCaretÀº »õ·Î À̵¿ÇÑ À§Ä¡°¡ È­¸é¿¡ º¸À̵µ·Ï ½ºÅ©·ÑÇÒ °ÍÀÌ´Ù. ½ÇÆÐÇÏ¸é ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾ÊÀ¸¸ç FALSE°¡ ¸®ÅϵȴÙ.

ã±â ´ëÈ­»óÀÚ¿¡¼­ ã±â ¹öÆ°À» Ŭ¸¯Çϸé ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¹®ÀÚ¿­ °Ë»öÀ» Çϵµ·Ï ÇÑ´Ù. À̶§ ¸ÞÀÎ À©µµ¿ì·Î WM_USER+2 ¸Þ½ÃÁö°¡ º¸³»Áö¸ç wParamÀº 1ÀÇ °ªÀ» °¡Áø´Ù.

 

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

{

     switch(iMessage) {

          ....

          case WM_USER+1:OnUser1(hWnd,wParam,lParam);return 0;

        case WM_USER+2:OnUser2(hWnd,wParam,lParam);return 0;

     }

     return(DefFrameProc(hWnd,g_hMDIClient,iMessage,wParam,lParam));

}

 

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

{

     HWND hActive;

     SInfo *pSi;

 

     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;

     }

}

 

ã±â ´ëÈ­»óÀÚ¿¡¼­ °Ë»ö ¹®ÀÚ¿­Àº arFind[0]ÀÇ ¼±µÎ¿¡, °Ë»ö ¿É¼ÇÀº FindFlag¿¡ ´ëÀÔÇصιǷΠÀÌ µÎ °ªÀ» FindText ÇÔ¼ö·Î ³Ñ°Ü Áֱ⸸ ÇÏ¸é µÈ´Ù. ¸¸¾à °Ë»ö¿¡ ½ÇÆÐÇÏ¸é ¸Þ½ÃÁö¹Ú½º·Î ½ÇÆÐ »ç½ÇÀ» ¾Ë·Á ÁÖµµ·Ï Çß´Ù. ÀÌÁ¦ ã±â ´ëÈ­»óÀÚ¿¡¼­ ´Ù¾çÇÑ °Ë»ö ¿É¼ÇÀ¸·Î ã±â¸¦ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ ÁîÀ½¿¡¼­ ¾à°£ ÀܼҸ®¸¦ Á» Çؾ߰ڴÙ. ¿©±â±îÁö ¸¸µé¾îÁø °Ë»ö ÇÙ½É ÇÔ¼ö´Â FindString, FindText µÎ °³À̸ç ÀÌÈÄÀÇ ¹Ù²Ù±â, ÆÄÀÏ°Ë»öÀÇ ±âº»ÀÌ µÈ´Ù. ÀÌ ÇÔ¼öµéÀÇ ÄÚµå´Â »ç½Ç ¾ÆÁÖ ½±°Ô ÆÄ¾ÇµÉ ¼ö ÀÖÀ» Á¤µµ·Î ´Ü¼øÇÑ ÆíÀ̶ó ±Ý¹æ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ Áö±Ý Ã¥À» °Ç¼ºÀ¸·Î ÀÐÀ¸¸é¼­ Ã¥À常 ³Ñ±â´Â »ç¶÷µé¿¡°Ô´Â µµ¹«Áö ¿Ö Àú·¸°Ô ¸¸µé¾ú´ÂÁö ÀÌÇØ°¡ ¾È °¥ Á¤µµ·Î º¹ÀâÇغ¸ÀδÙ. ÇöÀç À§Ä¡ÀÇ Á¤ÀÇ°¡ Àú·¸°Ô º¹ÀâÇÑ ÀÌÀ¯´Â ¹«¾ùÀÌ°í ¿Ö ÇÔ¼ö¸¦ µÑ·Î ³ª´©¾úÀ¸¸ç FindString È£ÃâÀÌ ¿Ö ¹«ÇÑ·çÇÁ¿¡ ½Î¿© ÀÖ´ÂÁö ¸¶Ä¡ ¾È°³ ¼ÓÀ» °È´Â °Í °°Àº ´À³¦ÀÏ °ÍÀÌ´Ù.

ÀÌ Äڵ带 ½±°Ô ÀÌÇØÇÑ »ç¶÷°ú ¾ÆÁ÷ ÀÌÇØÇÏÁö ¸øÇÑ »ç¶÷ÀÇ ±Ùº»ÀûÀÎ Â÷ÀÌÁ¡Àº Äڵ带 º¸°í ¼³¸íÀ» Àд°¡ ¾Æ´Ï¸é ¼³¸íÀ» Àаí Äڵ带 º¸´Â°¡ÀÇ Â÷ÀÌÀÌ´Ù. ÄÚµå ÀÚü°¡ °¡Àå ÇÔÃàÀûÀÌ°í Á¤È®ÇÑ ¼³¸íÀ» Çϱ⠶§¹®¿¡ Ç×»ó Äڵ带 Áß½ÉÀ¸·Î ³í¸®¸¦ ÀÌÇØÇÏ·Á°í ³ë·ÂÇØ¾ß ÇÑ´Ù. ¸»·Î µÈ ¼³¸íÀº Äڵ带 Ç®¾î¼­ ¼³¸íÇϱâ´Â ÇÏÁö¸¸ Äڵ常ŭ Á¤È®ÇÏ°Ô ¸ðµç °ÍÀ» º¸¿©ÁÙ ¼ö°¡ ¾ø´Ù. ³²ÀÌ ¸¸µé¾î ³õÀº ÇÔ¼ö¸¦ ºÐ¼®ÇÒ ¶§´Â ¸ÕÀú Äڵ带 ½º½º·Î ºÐ¼®ÇÏ·Á°í ½ÃµµÇØ º» ÈÄ ÀÚ½ÅÀÇ ºÐ¼® ³»¿ëÀ» ¼³¸íÀ¸·Î È®ÀÎÇÏ°í ÀÌÇصÇÁö ¾Ê´Â ºÎºÐ¿¡ ´ëÇؼ­´Â ¼³¸íÀ» ÂüÁ¶ÇÏ´Â °ÍÀÌ ÁÁ´Ù.

¼öµ¿ÀûÀ¸·Î ŸÀÇÀûÀÎ ¼³¸í¿¡ ÀÇÁ¸ÇÏÁö ¸»°í ½º½º·Î Äڵ带 ¸ÕÀú ºÐ¼®Çغ¸·Á´Â Àû±ØÀûÀÌ°í ´Éµ¿ÀûÀΠŵµ¸¦ °¡Áö¶ó´Â ¸»À» ÇÏ°í ½ÍÀº °ÍÀÌ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¾Æ¹« »ý°¢¾øÀÌ Ã¥À常 ³Ñ¾î°¥ °ÍÀÌ°í °á±¹ ¾Æ¹«¿¡°Ôµµ µµ¿òÀÌ µÇÁö ¸øÇÑ´Ù. ÀÌ·± ÀܼҸ®¸¦ ÀÚ²Ù ÇÏ´Â °ÍÀÌ ¹Ý°©Áö ¾Ê°ÚÁö¸¸ ¾ÕÀ¸·Î ´Ù·ê ³»¿ëµµ °è¼Ó ÀÌ·± ½ÄÀ¸·Î Äڵ带 º¸Áö ¾ÊÀ¸¸é ÀÌÇØÇϱ⠾î·Á¿î ³»¿ëÀÌ¶ó ³ª·Î¼­´Â ²À ÇÑ ¹ø ÁÖÀǸ¦ ȯ±â½Ãų ÇÊ¿ä°¡ ÀÖ´Ù°í ÆÇ´ÜÇß´Ù.