ÆíÁý µ¿ÀÛÀ» ±â·ÏÇÏ´Â ¸ðµç ÇÔ¼ö¸¦ ¿Ï¼ºÇß´Ù. ÀÌÁ¦ ¹®¼°¡ ½ÇÁ¦·Î ÆíÁýµÉ ¶§ ÀÌ ÇÔ¼öµéÀ» È£ÃâÇÏ¿© Ãë¼Ò ·¹Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. ¹®¼¸¦ ÆíÁýÇÏ´Â ÇÔ¼ö¸¦ ã¾Æ Àû´çÇÑ À§Ä¡¿¡¼ ÀÌ ÇÔ¼öµéÀ» È£ÃâÇÏ¸é µÈ´Ù. ¸ÕÀú ¹®ÀÚ¿ÀÌ »ðÀԵǴ ½ÃÁ¡ÀÎ 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¸¦ È£ÃâÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÃÖÀûÈ¿¡ ÀÇÇØ ÄÚµåÀÇ ÀÏ°ü¼ºÀÌ ±úÁø ÁÁÀº ¿¹ÀÌ´Ù.