¹Ù. ·¹ÄÚµå °ü¸® ÇÔ¼ö È£Ãâ.

ÆíÁý µ¿ÀÛÀ» ±â·ÏÇÏ´Â ¸ðµç ÇÔ¼ö¸¦ ¿Ï¼ºÇß´Ù. ÀÌÁ¦ ¹®¼­°¡ ½ÇÁ¦·Î ÆíÁýµÉ ¶§ ÀÌ ÇÔ¼öµéÀ» È£ÃâÇÏ¿© Ãë¼Ò ·¹Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. ¹®¼­¸¦ ÆíÁýÇÏ´Â ÇÔ¼ö¸¦ ã¾Æ Àû´çÇÑ À§Ä¡¿¡¼­ ÀÌ ÇÔ¼öµéÀ» È£ÃâÇÏ¸é µÈ´Ù. ¸ÕÀú ¹®ÀÚ¿­ÀÌ »ðÀԵǴ ½ÃÁ¡ÀÎ Insert ÇÔ¼ö¸¦ º¸ÀÚ.

 

void CApiEdit::Insert(int nPos, TCHAR *str, BOOL bRec/*=TRUE*/)

{

     if (bReadOnly)

          return;

 

    if (bRec) {

        URInsert(nPos,str);

    }

     ....

 

ÇÔ¼ö ¿øÇü¿¡ bRec Àμö°¡ Ãß°¡µÇ¾î ÀÖÀ½À» À¯ÀÇÇÏÀÚ. ÀÌ Àμö°¡ TRUEÀÎ °æ¿ì¸¸ Ãë¼Ò ·¹Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. bRec°¡ TRUEÀ̸é URInsert ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¹®ÀÚ¿­ÀÌ »ðÀÔµÈ À§Ä¡¿Í »ðÀÔµÈ ¹®ÀÚ¿­À» Àü´ÞÇÑ´Ù. URInsert ÇÔ¼ö´Â Insert ÇÔ¼ö°¡ Á¦°øÇÑ Á¤º¸¸¦ ÂüÁ¶ÇÏ¿© »õ·Î ·¹Äڵ带 ¸¸µéµçÁö ¾Æ´Ï¸é ±âÁ¸ ·¹Äڵ忡 º´ÇÕÀ» ÇϵçÁö ÇÏ¿© ¾î·µç ¹æ±Ý »ðÀÔÇÑ µ¿ÀÛ¿¡ ´ëÇÑ ±â·ÏÀ» ÀÛ¼ºÇسõÀ» °ÍÀÌ´Ù. ´ÙÀ½Àº »èÁ¦ÇÒ ¶§ÀÎ Delete ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù.

 

void CApiEdit::Delete(int nPos, int nCount, BOOL bRec/*=TRUE*/)

{

    TCHAR *t;

 

     if (bReadOnly)

          return;

 

     if (nCount == 0) return;

     if (doclen < nPos+nCount) return;

 

    if (bRec) {

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

        lstrcpyn(t,p,nCount+1);

        URDelete(nPos,t);

        free(t);

    }

     ....

 

Delete ÇÔ¼ö´Â »èÁ¦ÇÒ ¹®ÀÚ¿­ÀÇ À§Ä¡¿Í ±æÀ̸¸ Àü´Þ¹Þ±â ¶§¹®¿¡ »èÁ¦ÇÒ ¹®ÀÚ¿­¿¡ ´ëÇÑ Á¤º¸´Â °¡Áö°í ÀÖÁö ¾Ê´Ù. ±×·¡¼­ ÀӽùöÆÛ t¿¡ »èÁ¦´ë»ó ¹®ÀÚ¿­À» Á¶»çÇÑ ÈÄ ÀÌ ¹®ÀÚ¿­À» URDelete ÇÔ¼ö·Î ³Ñ°Ü ÁÖ¾ú´Ù. ´ÙÀ½Àº ¸¶¿ì½º·Î ¹®ÀÚ¿­À» µå·¡±×ÇÒ ¶§ À̵¿ ¹× º¹»ç󸮸¦ ÇÏ´Â CopyString ÇÔ¼ö¸¦ ¼öÁ¤ÇÏÀÚ.

 

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

{

     ....

    if (bRec) {

        if (bCopy) {

           URInsert(to,t);

        } else {

           URMove(from,orito,t);

        }

    }

     free(t);

}

 

º¹»çÇÒ ¶§´Â »õ·Î ¹®ÀÚ¿­ÀÌ »ðÀԵǴ °ÍÀ̹ǷΠURInsert ÇÔ¼ö¸¦ ´ë½Å È£ÃâÇϸç À̵¿ÇÒ ¶§´Â URMove ÇÔ¼ö¸¦ È£ÃâÇÏ¿© À̵¿µ¿ÀÛÀ» ±â·ÏÇϵµ·Ï ÇÏ¿´´Ù.

ÀÌ ¼¼ ÇÔ¼ö°¡ Ãë¼Ò ·¹Äڵ带 ÀÛ¼ºÇÏ´Â URInsert, URDelete, URMove ÇÔ¼ö¿Í Á÷Á¢ÀûÀ¸·Î ´ëÀÀµÇ´Â ÇÔ¼öµéÀÌ´Ù. ÀÌ ÇÔ¼öµé ¿Ü¿¡ ¹®¼­ÆíÁýÀÌ ÀϾ´Â °÷ÀÌ ÇÑ ±ºµ¥°¡ ´õ Àִµ¥ ¹Ù·Î OnImeChar ÇÔ¼öÀÌ´Ù.

 

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

{

     TCHAR szChar[3];

 

     if (IsDBCSLeadByte((BYTE)(wParam >> 8))) {

          szChar[0]=HIBYTE(LOWORD(wParam));

          szChar[1]=LOBYTE(LOWORD(wParam));

          szChar[2]=0;

     } else {

          szChar[0]=(BYTE)wParam;

          szChar[1]=0;

     }

 

     if (bComp) {

        URInsert(off-lstrlen(szChar),szChar);

          buf[off-2]=szChar[0];

          buf[off-1]=szChar[1];

     } else {

 

ÀÌ ÇÔ¼ö´Â Á¶¸³ÁßÀÎ ¹®ÀÚ°¡ ¿Ï¼ºµÉ ¶§ Insert ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾Ê°í ¹öÆÛ¸¦ Á÷Á¢ Á¶ÀÛÇÑ´Ù. ±×·¡¼­ ¿©±â¼­µµ URInsert ÇÔ¼ö¸¦ È£ÃâÇÏ¿© »õ ¹®ÀÚ°¡ »ðÀԵǾúÀ½À» ±â·ÏÇØ¾ß ÇÑ´Ù. ÀÌ ÄÚµå´Â »ç½Ç»ó ¿øÄ¢ÀûÀ¸·Î ²À ÇÊ¿äÇÏÁö´Â ¾Ê´Ù. ±×·¯³ª ÇѱÛÁ¶¸³Áß¿¡ ÀçÁ¤·Ä »ý·«À» À§ÇØ OnImeChar¸¦ ÃÖÀûÈ­Ç߱⠶§¹®¿¡ ÀÌ Äڵ带 ÀÛ¼ºÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¸¸¾à OnImeChar°¡ Á¶¸³Áß¿¡¶óµµ Delete·Î Áö¿ì°í Insert·Î »ðÀÔÇϵµ·Ï Çß´Ù¸é ¿©±â¼­ URInsert¸¦ È£ÃâÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÃÖÀûÈ­¿¡ ÀÇÇØ ÄÚµåÀÇ ÀÏ°ü¼ºÀÌ ±úÁø ÁÁÀº ¿¹ÀÌ´Ù.