¶ó. ±â·Ï ½ÃÁ¡

Ãë¼Ò ·¹ÄÚµå´Â »ç¿ëÀÚÀÇ »ðÀÔ, »èÁ¦, À̵¿µ¿ÀÛÀ» ±â·ÏÇÏ¸ç ±× ½ÃÁ¡Àº °¢ ¸í·É¿¡ ´ëÀÀµÇ´Â ÇÔ¼öÀÎ Insert, Delete, CopyString ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼öµé¿¡¼­ ·¹ÄÚµå ±â·Ï ÇÔ¼öµéÀ» È£ÃâÇÏ°Ô µÇ´Âµ¥ ¿¹¸¦ µé¾î Insert ÇÔ¼ö´Â ¹æ±Ý ¹®ÀÚ¿­ÀÌ »ðÀԵǾúÀ½À» ·¹ÄÚµå ±â·Ï ÇÔ¼ö¿¡°Ô ¾Ë·Á¾ß ÇÑ´Ù. ·¹ÄÚµå ±â·Ï ÇÔ¼ö¸¦ ÀÛ¼ºÇϱâ Àü¿¡ ¸ÕÀú ÀÌ ÇÔ¼öµéÀÌ ¾ðÁ¦ ·¹Äڵ带 ±â·ÏÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÒ ¼ö ÀÖµµ·Ï ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

ÀÌ ¼¼ ÇÔ¼öµéÀº ¹®¼­¸¦ Á÷Á¢ º¯°æ½ÃÅ°´Â µ¿ÀÛÀ» ÇÏÁö¸¸ ±×·¸´Ù°í Çؼ­ Ç×»ó Ãë¼Ò ·¹Äڵ忡 ÆíÁý µ¿ÀÛÀ» ±â·ÏÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. »ç¿ëÀÚ°¡ Á÷Á¢ ÆíÁýÀ» ÇÏ°í ÀÖÀ» ¶§, ¹®¼­ ³»¿ëÀÌ ½ÇÁ¦·Î º¯°æµÉ ¶§¸¸ ÆíÁý µ¿ÀÛÀ» ±â·ÏÇØ¾ß ÇÑ´Ù. Áï Insert, Delete, CopyString¿¡¼­ ¹®¼­ ³»¿ëÀ» º¯°æÇÏ´õ¶óµµ Ãë¼Ò ·¹ÄÚµå´Â ÀÛ¼ºÇÏÁö ¾Ê¾Æ¾ß ÇÒ °æ¿ì°¡ Àִµ¥ À̸¦ À§ÇØ ·¹ÄÚµå ±â·Ï ¿©ºÎ¸¦ Àü´Þ ¹Þ´Â bRec Àμö¸¦ Ãß°¡Çϵµ·Ï ÇÏÀÚ. ¿øÇüÀ» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

class CApiEdit

{

     ....

     void Insert(int nPos, TCHAR *str, BOOL bRec=TRUE);

     void Delete(int nPos, int nCount, BOOL bRec=TRUE);

     ....

     void CopyString(BOOL bCopy, int from, int &to, int len, BOOL bRec=TRUE);

 

¸ðµÎ bRecÀ̶ó´Â Àμö¸¦ Ãß°¡ÇßÀ¸¸ç ÀÌ ÀμöÀÇ µðÆúÆ®°ªÀº TRUE·Î ¼³Á¤ÇÏ¿© ±âÁ¸ Äڵ尡 ¿µÇâÀ» ¹ÞÁö ¾Êµµ·Ï ÇÏ¿´´Ù. ·¹Äڵ带 ±â·ÏÇÏÁö ¸»¾Æ¾ß ÇÒ ½ÃÁ¡¿¡¼­ ÀÌ ÇÔ¼öµéÀ» ºÎ¸¦ ¶§´Â bRec¿¡ FALSE¸¦ Àü´ÞÇØ¾ß ÇÑ´Ù. ±×·¸´Ù¸é ¾î¶² »óȲÀÌ ÆíÁý µ¿ÀÛÀ» ±â·ÏÇÏÁö ¸»¾Æ¾ß ÇÒ ¶§ÀÎÁö ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

ù ¹ø°´Â SetText ÇÔ¼ö¿¡¼­ ¹®¼­ ÅؽºÆ®¸¦ ´ëÀÔ ¹ÞÀ» ¶§ÀÌ´Ù. È£½ºÆ®ÀÇ ÀÔÀå¿¡¼­ º»´Ù¸é ÆÄÀÏÀ» ¿­¾î¼­ ApiEdit¿¡ ÅؽºÆ®¸¦ Àü´ÞÇÏ´Â ½ÃÁ¡Àε¥ ÀÌ ¶§´Â ÆíÁýÀ» ½ÃÀÛÇϱâ Á÷ÀüÀ̹ǷΠÅؽºÆ® ´ëÀÔ ÀÚü¸¦ ±â·ÏÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÆÄÀÏÀ» Àд µ¿ÀÛ ÀÚü´Â ÄÁÆ®·ÑÀÇ ÀÔÀå¿¡¼­´Â Ãë¼Ò ´ë»óÀÌ ¾Æ´Ï¹Ç·Î ÀÌ ÇÔ¼ö¿¡¼­ È£ÃâÇÏ´Â Insert ÇÔ¼öÀÇ bRecÀº FALSE°¡ µÇ¾î¾ß ÇÑ´Ù.

 

void CApiEdit::SetText(TCHAR *TextBuf)

{

     InitDoc();

    Insert(0,TextBuf,FALSE);

}

 

µÎ ¹ø°´Â ¹®ÀÚ¿­À» À̵¿½ÃÅ°´Â CopyString ÇÔ¼ö¿¡¼­ È£ÃâÇÏ´Â Insert, Delete ¹®ÀÌ´Ù. ¹®ÀÚ¿­ À̵¿Àº »èÁ¦ ÈÄ »ðÀÔ°ú °°Àºµ¥ ÀÌ µÎ µ¿ÀÛÀº ¹­¾î¼­ À̵¿À¸·Î Á¤ÀǵǹǷΠµû·Î Ãë¼Ò ·¹Äڵ带 ±â·ÏÇÒ ÇÊ¿ä°¡ ¾ø´Ù. UndoRecord´Â ÀÌ¹Ì À̵¿µ¿ÀÛÀ» À§ÇØ UR_MOVE ¾×¼ÇÀ» µû·Î Á¤ÀÇÇسõ¾Ò±â ¶§¹®¿¡ ÀÌ ÇÔ¼ö°¡ È£ÃâÇÏ´Â Insert, Delete ÇÔ¼öÀÇ bRec´Â FALSE¿©¾ß ÇÑ´Ù.

 

void CApiEdit::CopyString(BOOL bCopy, int from, int &to, int len, BOOL bRec/*=TRUE*/)

{

     TCHAR *t;

     int orito=to;

 

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

     lstrcpyn(t,buf+from,len+1);

    Insert(to,t,FALSE);

 

     if (bCopy==FALSE) {

          if (to > from) {

           Delete(from,len,FALSE);

              to-=len;

          } else {

           Delete(from+len,len,FALSE);

          }

     }

     free(t);

}

 

Ãë¼Ò ·¹Äڵ带 ±â·ÏÇÏÁö ¾Ê´Â ¼¼ ¹ø° °æ¿ì´Â ÇѱÛÀ» Á¶¸³ÇÏ´Â OnImeComposition ÇÔ¼öÀÌ´Ù. Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ º¯°æÇϱâ À§ÇØ »èÁ¦, »ðÀÔÀ» ¿¬°ÅǪ È£ÃâÇϴµ¥ À̶§´Â ¹®¼­°¡ ¹Ù²î±â´Â ÇÏÁö¸¸ ¾ÆÁ÷ ±ÛÀÚ°¡ ¿Ï¼ºµÈ °ÍÀÌ ¾Æ´Ï¹Ç·Î Ãë¼Ò ·¹Äڵ忡 ±â·ÏÇϱ⿡´Â ³Ê¹« À̸£´Ù. ¿¹¸¦ µé¾î ¡®ÇÏ¡¯ÀÚ »óÅ¿¡¼­ ¤¤ÀÌ ÀÔ·ÂµÇ¾î ¡®ÇÑ¡¯ÀÚ°¡ µÉ ¶§ ¡®ÇÏ¡¯¸¦ »èÁ¦ÇÏ°í ¡®ÇÑ¡¯À» ´Ù½Ã »ðÀÔÇϴµ¥ ÀÌ µÎ µ¿ÀÛÀº µû·Î ±â·ÏÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

LRESULT CApiEdit::OnImeComposition(HWND hWnd, WPARAM wParam, LPARAM lParam)

{

     ....

              if (bComp) {

                   off-=2;

               Delete(off,2,FALSE);

                   bNewIns=FALSE;

              }

              if (len == 0) {

                   bComp=FALSE;

              } else {

                   bComp=TRUE;

              }

 

              if (bOvr && bNewIns && bPrevSel==FALSE) {

                   if (IsDBCS(buf,off)) {

                        if (buf[off] != ¡®\r¡¯) {

                            Delete(off,2);

                        }

                   } else {

                        Delete(off,1);

                   }

              }

 

           Insert(off,szComp,FALSE);

              off+=len;

          }

     ....

}

 

Á¶¸³ÁßÀÇ »èÁ¦ µ¿ÀÛ°ú Á¶¸³ ÈÄÀÇ »ðÀÔ µ¿ÀÛ¿¡ ´ëÇؼ­´Â Ãë¼Ò ·¹Äڵ带 ±â·ÏÇÏÁö ¾Êµµ·Ï ÇÏ¿´´Ù. ÀÌ ÇÔ¼ö´Â Á¶¸³ÁßÀÎ Çѱ۸¸ ´Ù·ç¹Ç·Î µû·Î ±â·ÏÇÏÁö ¾Ê´õ¶óµµ ±ÛÀÚ°¡ ¿Ï¼ºµÉ ¶§¸¶´Ù OnImeChar¿¡¼­ ¿Ï¼ºµÈ ±ÛÀÚ¿¡ ´ëÇØ Ãë¼Ò ·¹Äڵ带 Á¦´ë·Î ÀÛ¼ºÇÏ°Ô µÈ´Ù.

µ¤¾î¾²±â ¸ðµåÀÏ ¶§´Â Ãë¼Ò ·¹Äڵ带 ±â·ÏÇϵµ·Ï Çߴµ¥ µ¤¾î¾²±â´Â »èÁ¦ ÈÄ »ðÀÔÀ¸·Î Á¤ÀǵǾî ÀÖ°í ÀÌ Á¤ÀÇ¿¡ ÀÇÇØ Delete¸¦ È£ÃâÇÒ ¶§ Ãë¼Ò ·¹Äڵ带 ±â·ÏÇÑ´Ù. µû¶ó¼­ µ¤¾î ¾²±â ¸ðµå¿¡¼­´Â ÇѱÛÀÚ ÀÔ·ÂÇÒ ¶§¸¶´Ù »èÁ¦ ·¹ÄÚµå¿Í »ðÀÔ ·¹Äڵ尡 °¢°¢ Çϳª¾¿ »ý¼ºµÇ¾î º°·Î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ´ëü ¾×¼ÇÀ» µû·Î Á¤ÀÇÇÑ´Ù¸é µ¤¾î¾²±â¸¦ ÇÑ ¹øÀÇ ¾×¼ÇÀ¸·Î ó¸®ÇÒ ¼öµµ ÀÖÁö¸¸ ³Ê¹« º¹ÀâÇØÁö´Âµ¥´Ù ´ÙÇàÈ÷ µ¤¾î¾²±â ¸ðµå´Â Àß »ç¿ëµÇÁö ¾ÊÀ¸¹Ç·Î ÀÌ´ë·Î µÎ±â·Î Çß´Ù. º¸±â¿¡ Á» ¾È ÁÁÀ» »ÓÀÌÁö ±â´É»óÀÇ ¹®Á¦´Â ¾ø´Ù.

ÀÌ ¼¼ °æ¿ì¿¡ Ãë¼Ò ·¹Äڵ带 ¿Ö ±â·ÏÇÏÁö ¸»¾Æ¾ß ÇÏ´ÂÁö´Â ¾î·ÆÁö ¾Ê°Ô ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù. ÀÌ¿Ü¿¡ ·¹ÄÚµå ±â·ÏÀ» ÇÏÁö ¸»¾Æ¾ß ÇÒ °¡Àå Áß¿äÇÑ ½ÃÁ¡ÀÌ Àִµ¥ ¹Ù·Î Ãë¼Ò/Àç½ÇÇàÇÒ ¶§ÀÌ´Ù. »ðÀÔ ·¹Äڵ带 Ãë¼ÒÇÏ¸é »èÁ¦Àε¥ À̶§ È£ÃâµÇ´Â Delete ÇÔ¼ö´Â bRecÀ» FALSE·Î Áà¾ß ÇÑ´Ù. »ðÀÔÀ» Ãë¼ÒÇÏ°íÀÚ »èÁ¦¸¦ Çϴµ¥ ÀÌ »èÁ¦ µ¿ÀÛÀÌ ¶Ç ±â·ÏµÈ´Ù¸é Ãë¼Ò ·¹ÄÚµå´Â ¹«ÇÑÈ÷ Ä¿Áö±â¸¸ ÇÒ °ÍÀÌ´Ù. Àç½ÇÇàÇÒ ¶§µµ ¸¶Âù°¡Áö·Î Ãë¼Ò ·¹Äڵ带 ±â·ÏÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. Ãë¼Ò/Àç½ÇÇà½ÃÀÇ Ãë¼Ò ·¹ÄÚµå´Â ±â·Ï ´ë»óÀÌ ¾Æ´Ï¶ó ´Ü¼øÈ÷ »ç¿ë ´ë»óÀÏ »ÓÀÌ´Ù.

Insert, Delete, CopyString ÇÔ¼ö°¡ ÀûÀýÇÑ ½Ã±â¿¡ Ãë¼Ò ·¹Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï Áغñ¸¸ ÇßÀ¸¸ç ¾ÆÁ÷ ·¹Äڵ带 ÀÛ¼ºÇÏ´Â ÄÚµå´Â ¸¸µéÁö ¾Ê¾Ò´Ù. Àá½Ã ÈÄ Ãë¼Ò ·¹Äڵ带 ±â·ÏÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ ÈÄ ÆíÁý½Ã¿¡ ÀÌ ÇÔ¼öµéÀ» È£ÃâÇϵµ·Ï ´Ù½Ã ¼öÁ¤ÇÒ °ÍÀÌ´Ù.