³ª. Á¶¸³ÁßÀÇ ÀçÁ¤·Ä »ý·«

±ÛÀÚ°¡ ½ÇÁ¦·Î ÀԷµǾúÀ» ¶§´Â ÀÌ ±ÛÀÚ°¡ µé¾î°¥ ¼ö ÀÖµµ·Ï ¸Þ¸ð¸®¸¦ µÚ·Î À̵¿½ÃÄÑ¾ß ÇÏ°í Á¤·Äµµ ´Ù½Ã ÇØ¾ß ÇÑ´Ù. ±ÛÀÚ°¡ »èÁ¦µÉ ¶§µµ ¹°·Ð ¸¶Âù°¡Áö´Ù. ¸Þ¸ð¸® À̵¿°ú ÀçÁ¤·ÄÀº ½Ã°£À» ¸¹ÀÌ ¼Ò¸ðÇÏ´Â µ¿ÀÛÀÌÁö¸¸ »ðÀÔ, »èÁ¦µÉ ¶§´Â ¹®¼­¿¡ º¯È­°¡ »ý°åÀ¸¹Ç·Î ºÒ°¡ÇÇÇÏ°Ô Á¤·ÄÀ» ÇÏÁö ¾ÊÀ» ¼ö°¡ ¾ø´Ù. ±×·¯³ª ÇѱÛÁ¶¸³ÁßÀÏ ¶§´Â ÀÓ½ÃÀûÀÎ ±ÛÀÚ ´ëüÀ̹ǷΠ±»ÀÌ ¸Þ¸ð¸® À̵¿ ¹× ÀçÁ¤·ÄÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.

¡®´ëÇѹα¹¡¯À» ÀÔ·ÂÇÏ°í ÀÖ´Â ÁßÀε¥ µÎ ¹ø° À½Àý¿¡ ¡®ÇÏ¡¯ÀÚ±îÁö ÀÔ·ÂµÈ »óȲ¿¡¼­ ¤¤À» ÀÔ·ÂÇÏ¿´´Ù. ¡®ÇÏ¡¯ÀÚ¸¦ ¡®ÇÑ¡¯ÀÚ·Î ´ëüÇϱâ À§ÇØ ¸ÕÀú Á¶¸³Áß¿¡ ÀÖ´Â Àӽà ¹®ÀÚÀÎ ¡®ÇÏ¡¯ÀÚ¸¦ »èÁ¦Çϸç ÀÌ °úÁ¤¿¡¼­ 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 Á¶°ÇÀº ÇÊ¿ä¾ø¾îÁ³´Ù.

±ÛÀÚ Á¶¸³Áß¿¡´Â ¸Þ¸ð¸® »ðÀÔ, »èÁ¦¸¦ ÇÏÁö ¾ÊÀ¸¸ç ÀçÁ¤·Äµµ ÇÏÁö ¾ÊÀ¸¹Ç·Î ÇѱÛÁ¶¸³Àº ½Ç½Ã°£À¸·Î ¼öÇàµÇ¸ç ½Ã°£ÀÌ °ÅÀÇ µéÁö ¾Ê´Â´Ù. ±×·¯³ª Á¶¸³ÀÌ ½ÃÀÛµÉ ¶§³ª ¿µ¹®ÀÚÀÔ·ÂÁßÀÏ ¶§´Â ¾ÆÁ÷µµ ¿©ÀüÈ÷ ´À¸®´Ù.