Ãë¼Ò ·¹ÄÚµå´Â »ç¿ëÀÚÀÇ »ðÀÔ, »èÁ¦, À̵¿µ¿ÀÛÀ» ±â·ÏÇÏ¸ç ±× ½ÃÁ¡Àº °¢ ¸í·É¿¡ ´ëÀÀµÇ´Â ÇÔ¼öÀÎ 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 ÇÔ¼ö°¡ ÀûÀýÇÑ ½Ã±â¿¡ Ãë¼Ò ·¹Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï Áغñ¸¸ ÇßÀ¸¸ç ¾ÆÁ÷ ·¹Äڵ带 ÀÛ¼ºÇÏ´Â ÄÚµå´Â ¸¸µéÁö ¾Ê¾Ò´Ù. Àá½Ã ÈÄ Ãë¼Ò ·¹Äڵ带 ±â·ÏÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ ÈÄ ÆíÁý½Ã¿¡ ÀÌ ÇÔ¼öµéÀ» È£ÃâÇϵµ·Ï ´Ù½Ã ¼öÁ¤ÇÒ °ÍÀÌ´Ù.