°Ë»öÀÇ ´ë»óÀº ¿¸° ¹®¼ÀÌ¸ç ¹®¼¿¡ ´ëÇÑ ¸ðµç Á¤º¸´Â 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 È£ÃâÀÌ ¿Ö ¹«ÇÑ·çÇÁ¿¡ ½Î¿© ÀÖ´ÂÁö ¸¶Ä¡ ¾È°³ ¼ÓÀ» °È´Â °Í °°Àº ´À³¦ÀÏ °ÍÀÌ´Ù.
ÀÌ Äڵ带 ½±°Ô ÀÌÇØÇÑ »ç¶÷°ú ¾ÆÁ÷ ÀÌÇØÇÏÁö ¸øÇÑ »ç¶÷ÀÇ ±Ùº»ÀûÀÎ Â÷ÀÌÁ¡Àº Äڵ带 º¸°í ¼³¸íÀ» Àд°¡ ¾Æ´Ï¸é ¼³¸íÀ» Àаí Äڵ带 º¸´Â°¡ÀÇ Â÷ÀÌÀÌ´Ù. ÄÚµå ÀÚü°¡ °¡Àå ÇÔÃàÀûÀÌ°í Á¤È®ÇÑ ¼³¸íÀ» Çϱ⠶§¹®¿¡ Ç×»ó Äڵ带 Áß½ÉÀ¸·Î ³í¸®¸¦ ÀÌÇØÇÏ·Á°í ³ë·ÂÇØ¾ß ÇÑ´Ù. ¸»·Î µÈ ¼³¸íÀº Äڵ带 Ç®¾î¼ ¼³¸íÇϱâ´Â ÇÏÁö¸¸ Äڵ常ŠÁ¤È®ÇÏ°Ô ¸ðµç °ÍÀ» º¸¿©ÁÙ ¼ö°¡ ¾ø´Ù. ³²ÀÌ ¸¸µé¾î ³õÀº ÇÔ¼ö¸¦ ºÐ¼®ÇÒ ¶§´Â ¸ÕÀú Äڵ带 ½º½º·Î ºÐ¼®ÇÏ·Á°í ½ÃµµÇØ º» ÈÄ ÀÚ½ÅÀÇ ºÐ¼® ³»¿ëÀ» ¼³¸íÀ¸·Î È®ÀÎÇÏ°í ÀÌÇصÇÁö ¾Ê´Â ºÎºÐ¿¡ ´ëÇؼ´Â ¼³¸íÀ» ÂüÁ¶ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
¼öµ¿ÀûÀ¸·Î ŸÀÇÀûÀÎ ¼³¸í¿¡ ÀÇÁ¸ÇÏÁö ¸»°í ½º½º·Î Äڵ带 ¸ÕÀú ºÐ¼®Çغ¸·Á´Â Àû±ØÀûÀÌ°í ´Éµ¿ÀûÀΠŵµ¸¦ °¡Áö¶ó´Â ¸»À» ÇÏ°í ½ÍÀº °ÍÀÌ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¾Æ¹« »ý°¢¾øÀÌ Ã¥À常 ³Ñ¾î°¥ °ÍÀÌ°í °á±¹ ¾Æ¹«¿¡°Ôµµ µµ¿òÀÌ µÇÁö ¸øÇÑ´Ù. ÀÌ·± ÀܼҸ®¸¦ ÀÚ²Ù ÇÏ´Â °ÍÀÌ ¹Ý°©Áö ¾Ê°ÚÁö¸¸ ¾ÕÀ¸·Î ´Ù·ê ³»¿ëµµ °è¼Ó ÀÌ·± ½ÄÀ¸·Î Äڵ带 º¸Áö ¾ÊÀ¸¸é ÀÌÇØÇϱ⠾î·Á¿î ³»¿ëÀÌ¶ó ³ª·Î¼´Â ²À ÇÑ ¹ø ÁÖÀǸ¦ ȯ±â½Ãų ÇÊ¿ä°¡ ÀÖ´Ù°í ÆÇ´ÜÇß´Ù.