±ÛÀÚ°¡ ½ÇÁ¦·Î ÀԷµǾúÀ» ¶§´Â ÀÌ ±ÛÀÚ°¡ µé¾î°¥ ¼ö ÀÖµµ·Ï ¸Þ¸ð¸®¸¦ µÚ·Î À̵¿½ÃÄÑ¾ß ÇÏ°í Á¤·Äµµ ´Ù½Ã ÇØ¾ß ÇÑ´Ù. ±ÛÀÚ°¡ »èÁ¦µÉ ¶§µµ ¹°·Ð ¸¶Âù°¡Áö´Ù. ¸Þ¸ð¸® À̵¿°ú ÀçÁ¤·ÄÀº ½Ã°£À» ¸¹ÀÌ ¼Ò¸ðÇÏ´Â µ¿ÀÛÀÌÁö¸¸ »ðÀÔ, »èÁ¦µÉ ¶§´Â ¹®¼¿¡ º¯È°¡ »ý°åÀ¸¹Ç·Î ºÒ°¡ÇÇÇÏ°Ô Á¤·ÄÀ» ÇÏÁö ¾ÊÀ» ¼ö°¡ ¾ø´Ù. ±×·¯³ª ÇѱÛÁ¶¸³ÁßÀÏ ¶§´Â ÀÓ½ÃÀûÀÎ ±ÛÀÚ ´ëüÀ̹ǷΠ±»ÀÌ ¸Þ¸ð¸® À̵¿ ¹× ÀçÁ¤·ÄÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.
¡®´ëÇѹα¹¡¯À» ÀÔ·ÂÇÏ°í ÀÖ´Â ÁßÀε¥ µÎ ¹ø° À½Àý¿¡ ¡®ÇÏ¡¯ÀÚ±îÁö ÀÔ·ÂµÈ »óȲ¿¡¼ ¤¤À» ÀÔ·ÂÇÏ¿´´Ù. ¡®ÇÏ¡¯ÀÚ¸¦ ¡®ÇÑ¡¯ÀÚ·Î ´ëüÇϱâ À§ÇØ ¸ÕÀú Á¶¸³Áß¿¡ ÀÖ´Â Àӽà ¹®ÀÚÀÎ ¡®ÇÏ¡¯ÀÚ¸¦ »èÁ¦Çϸç ÀÌ °úÁ¤¿¡¼ Delete ÇÔ¼ö°¡ ¸Þ¸ð¸® À̵¿ ¹× ÀçÁ¤·ÄÀ» ¼öÇàÇÑ´Ù. ±×¸®°í »õ·Î ÀÔ·ÂµÈ À½¼Ò¸¦ ÇÕÃÄ ¡®ÇÑ¡¯ÀÚ°¡ ±× ÀÚ¸®¿¡ »ðÀԵǴµ¥ Insert ÇÔ¼öµµ ¸Þ¸ð¸® À̵¿À» ÇÏ¸é¼ Á¤·ÄÀ» ´Ù½Ã ÇÏ°Ô µÈ´Ù.
°á°úÀûÀ¸·Î º¼ ¶§ ¡®ÇÏ¡¯ÀÚ°¡ ¡®ÇÑ¡¯ÀÚ·Î ¹Ù²î±â¸¸ ÇßÀ» »Ó ÀüÈÄÀÇ ¸Þ¸ð¸® »óÅ´ ÀüÇô º¯È°¡ ¾øÀ¸¸ç µû¶ó¼ Á¤·Äµµ ¹Ù²ð ÇÊ¿ä°¡ ¾ø´Ù. Insert, Delete ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾Ê°í °ð¹Ù·Î ¹öÆÛ¿¡ ÀÖ´Â ±ÛÀÚ¸¦ ¹Ù²Ù°í ȸéÀ» ´Ù½Ã ±×¸®±â¸¸ ÇÏ¸é µÈ´Ù. µÎ ¹øÀÇ ºÒÇÊ¿äÇÑ ÀçÁ¤·ÄÀ» ÇÏÁö ¾Ê¾Æµµ µÇ´Â °ÍÀÌ´Ù. OnImeCompositionÀ» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çغ¸ÀÚ.
LRESULT OnImeComposition(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
....
szComp[len]=0;
if (bComp && len!=0) {
buf[off-2]=szComp[0];
buf[off-1]=szComp[1];
} else {
if (bComp) {
....
off+=len;
}
ImmReleaseContext(hWnd,hImc);
....
Á¶¸³ÁßÀÏ ¶§(bComp)´Â ¹öÆÛÀÇ ÇöÀç À§Ä¡¿¡ °ð¹Ù·Î Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ ´ëüÇÏ¿´À¸¸ç ÀçÁ¤·ÄÀ» ÇÏÁö ¾Êµµ·Ï ÇÏ¿´´Ù. ´Ü, Á¶¸³ÁßÀÌ¶óµµ lenÀÌ 0ÀÎ °æ¿ì´Â BS¿¡ ÀÇÇØ ¹®ÀÚ°¡ »èÁ¦µÈ °æ¿ìÀ̹ǷΠ´ëüÇÒ ¹®ÀÚ°¡ ¾øÀ¸¸ç Á¶¸³ÁßÀÎ ±ÛÀÚ°¡ »èÁ¦µÇ¹Ç·Î ¸Þ¸ð¸® À̵¿µµ ÇÊ¿äÇÏ°í ÀçÁ¤·Äµµ ÇÊ¿äÇÏ´Ù. Á¶¸³ÁßÀº ±ÛÀÚ°¡ ¿Ï¼ºµÉ ¶§ÀÎ OnImeChar ÇÔ¼öµµ ¼öÁ¤ÇÑ´Ù.
LRESULT 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) {
buf[off-2]=szChar[0];
buf[off-1]=szChar[1];
} else {
if (bOvr) {
if (IsDBCS(off)) {
if (buf[off] != ¡®\r¡¯) {
Delete(off,2);
}
} else {
Delete(off,1);
}
}
Insert(off,szChar);
off+=lstrlen(szChar);
}
bComp=FALSE;
Invalidate(FindParaStart(off-lstrlen(szChar)));
SetCaret();
return 0;
}
bComp°¡ TRUEÀÏ ¶§, Áï Á¶¸³ÁßÀÎ ÇѱÛÀÌ ¿Ï¼ºµÉ ¶§µµ ±ÛÀÚ¸¦ ´ëü¸¸ ÇÒ »Ó ÀçÁ¤·ÄÇÒ ÇÊ¿ä°¡ ¾ø´Ù. µ¤¾î¾²±â ¸ðµåÀÏ ¶§µµ ¸¶Âù°¡Áö ¹æ½ÄÀ¸·Î µ¿ÀÛÇÏ¸é µÈ´Ù. ¾Æ·¡ÂÊÀÇ if (bOvr && bCmop==FALSE) Á¶°Ç¿¡¼ bComp==FALSE Á¶°ÇÀº ÇÊ¿ä¾ø¾îÁ³´Ù.
±ÛÀÚ Á¶¸³Áß¿¡´Â ¸Þ¸ð¸® »ðÀÔ, »èÁ¦¸¦ ÇÏÁö ¾ÊÀ¸¸ç ÀçÁ¤·Äµµ ÇÏÁö ¾ÊÀ¸¹Ç·Î ÇѱÛÁ¶¸³Àº ½Ç½Ã°£À¸·Î ¼öÇàµÇ¸ç ½Ã°£ÀÌ °ÅÀÇ µéÁö ¾Ê´Â´Ù. ±×·¯³ª Á¶¸³ÀÌ ½ÃÀÛµÉ ¶§³ª ¿µ¹®ÀÚÀÔ·ÂÁßÀÏ ¶§´Â ¾ÆÁ÷µµ ¿©ÀüÈ÷ ´À¸®´Ù.