°¡. ¼±Åÿµ¿ª »èÁ¦

¼±Åÿµ¿ªÀ» ÁöÁ¤ÇÑ ÈÄ ¿©·¯ °¡Áö ÀÛ¾÷À» ÇÒ ¼ö Àִµ¥ ±× Áß °¡Àå ºóµµ°¡ ³ôÀº ÀÛ¾÷ÀÌ ¹Ù·Î »èÁ¦ÇÏ´Â °ÍÀÌ´Ù. ¹®¼­ÀÇ ÀϺκÐÀ» ¼±ÅÃÇÑ ÈÄ <Del>Å°¸¦ ´©¸£¸é ¼±ÅÃÇÑ ºÎºÐ¸¸ »èÁ¦ÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ ÀÌ ±â´ÉÀº ²À <Del>Å°³ª <BS>Å°¸¦ ´©¸¦ ¶§»Ó¸¸ ¾Æ´Ï¶ó ¼±ÅÃÀÌ ÀÖ´Â »óÅ¿¡¼­ »õ·Î¿î ¹®ÀÚ¸¦ ÀÔ·ÂÇÒ ¶§µµ ÇÊ¿äÇÏ´Ù. ¹®ÀåÀ» ¼±ÅÃÇسõ°í ´Ù¸¥ ¹®ÀåÀ» ÀÔ·ÂÇÑ´Ù´Â °ÍÀº ¼±Åÿµ¿ªÀ» »õ·Î¿î ¹®ÀåÀ¸·Î ´ëüÇÑ´Ù´Â ¶æÀÌ´Ù. ÀÌ µ¿ÀÛÀ» Çϱâ À§Çؼ­´Â ¼±Åÿµ¿ª¸¸ »èÁ¦ÇÏ´Â ÇÔ¼ö°¡ ÇÊ¿äÇÏ´Ù. ´ÙÀ½ ÇÔ¼ö¸¦ Ãß°¡Çϵµ·Ï ÇÏÀÚ.

 

BOOL DeleteSelection()

{

     int SelFirst, SelSecond;

 

     if (SelStart != SelEnd) {

          SelFirst=min(SelStart,SelEnd);

          SelSecond=max(SelStart,SelEnd);

          Delete(SelFirst,SelSecond-SelFirst);

          SelStart=SelEnd=0;

          off=SelFirst;

          return TRUE;

     }

     return FALSE;

}

 

¼±Åÿµ¿ªÀÌ ÀÖÀ¸¸é Á¤±ÔÈ­ÇÑ ÈÄ Delete ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÀÌ ¿µ¿ªÀ» »èÁ¦ÇÑ´Ù. ±×¸®°í ¼±Åÿµ¿ªÀº ÇØÁ¦ÇÏ°í ij·µÀº ¼±Åÿµ¿ªÀÇ Ã³À½ À§Ä¡·Î º¸³½´Ù. ¼±Åÿµ¿ªÀ» »èÁ¦ÇßÀ¸¸é TRUE¸¦ ¸®ÅÏÇÏ°í ¾Æ¿¹ ¼±Åÿµ¿ªÀÌ ¾ø¾ú´Ù¸é FALSE¸¦ ¸®ÅÏÇÏ¿´´Ù. ¼±Åÿµ¿ªÀÌ »èÁ¦µÇ¸é È­¸éÀ» ´Ù½Ã ±×·Á¾ß ÇÏ°í ij·µµµ ¿Å°Ü¾ß Çϴµ¥ ÀÌ ÀÛ¾÷Àº DeleteSelection¿¡¼­ ÇÏÁö ¾Ê°í È£Ãâ¿ø¿¡¼­ Á÷Á¢ Çϵµ·Ï ÇÏ¿´´Ù. ±×´ÙÁö ¾î·Á¿î ³»¿ëÀÌ ¾ø´Â °£´ÜÇÑ ÇÔ¼ö´Ù.

¹®ÀÚ¿­ÀÌ ÀԷµǴ °÷¸¶´Ù ÀÌ ÇÔ¼ö¸¦ È£ÃâÇØ¾ß Çϴµ¥ ¸¹Áö´Â ¾Ê°í ¼¼ ±ºµ¥»ÓÀÌ´Ù. ¸ÕÀú ¸í½ÃÀûÀ¸·Î ¹®ÀåÀ» »èÁ¦ÇÏ´Â VK_DELETE¿¡¼­ ÀÌ ÇÔ¼ö¸¦ ºÒ·¯ÁØ´Ù.

 

     case VK_DELETE:

        if (DeleteSelection()==FALSE) {

               if (IsDBCS(off)) {

                   Delete(off, 2);

               } else {

                   Delete(off, 1);

               }

        }

          InvalidateRect(hWnd,NULL,TRUE);

          SetCaret();

          return;

 

DeleteSelectionÀ» ¸ÕÀú ºÎ¸£°í ÀÌ ÇÔ¼ö°¡ TRUE¸¦ ¸®ÅÏÇßÀ¸¸é, Áï ¼±Åÿµ¿ªÀÌ ÀÖ¾úÀ¸¸é ij·µ¸¸ ¿Å±ä´Ù. ¼±Åÿµ¿ªÀÌ ¾ø¾ú´Ù¸é ÇÑ ¹®ÀÚ¸¦ »èÁ¦ÇÏ¸é µÈ´Ù. <BS>Å°µµ ¼±Åÿµ¿ªÀ» »èÁ¦ÇÏ´Â ±â´ÉÀ» °¡Á®¾ß Çϴµ¥ ÇöÀç BS´Â <Del>Å°ÀÇ ±â´ÉÀ» ºô·Á¼­ ¾²°í Àֱ⠶§¹®¿¡ º°µµÀÇ Äڵ带 Ãß°¡ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

´ÙÀ½Àº ¼±Åà »óÅ¿¡¼­ ¹®ÀÚ¿­ÀÌ ÀÔ·ÂµÉ ¶§ ¼±ÅÃÀ» »èÁ¦Çϵµ·Ï ÇÏÀÚ. ¿µ¹®ÀÚ´Â OnChar¿¡¼­ ÀԷµǹǷΠÀÌ ÇÔ¼ö¿¡¼­ ¹®ÀÚ¿­À» »ðÀÔÇϱâ Àü¿¡ DeleteSelection ÇÔ¼ö¸¸ ºÎ¸£¸é µÈ´Ù. Áï, ¼±Åÿµ¿ªÀÌ ÀÖÀ¸¸é ¹«Á¶°Ç Áö¿ö¹ö¸®°í ¹®ÀÚ¸¦ ÀԷ¹޴´Ù.

 

void OnChar(HWND hWnd, TCHAR ch, int cRepeat)

{

     ....

    DeleteSelection();

     for (i=0;i<cRepeat;i++) {

          Insert(off,szChar);

          off+=lstrlen(szChar);

     }

     bComp=FALSE;

     InvalidateRect(hWnd,NULL,TRUE);

     SetCaret();

}

 

ÇѱÛÀº Á¶¸³ÀÌ ½ÃÀÛµÉ ¶§ ¼±Åÿµ¿ªÀ» »èÁ¦ÇØ¾ß ÇϹǷΠOnImeComposition¿¡¼­ ÀÌ ÇÔ¼ö¸¦ ºÎ¸£¸é µÈ´Ù.

 

LRESULT OnImeComposition(HWND hWnd, WPARAM wParam, LPARAM lParam)

{

     HIMC hImc;

     TCHAR *szComp;

     int len;

 

    DeleteSelection();

     hImc=ImmGetContext(hWnd);

     ...

 

¾ð¶æ »ý°¢Çϱ⿡ ±ÛÀÚ°¡ ¿Ï¼ºµÇ´Â OnImeChar¿¡¼­ ¼±Åÿµ¿ªÀ» »èÁ¦ÇØ¾ß ÇÒ °Í °°Áö¸¸ Á¶¸³ÀÌ ½ÃÀ۵Ǵ ½ÃÁ¡¿¡¼­ »èÁ¦ÇØ¾ß ÇÑ´Ù. Á¶¸³À» ½ÃÀÛÇÒ ¶§ ¼±Åÿµ¿ªÀ» »èÁ¦ÇÏ¸é  OnImeChar°¡ È£ÃâµÉ ¶§´Â ¼±ÅÃÀÌ ³²¾Æ ÀÖÀ» ¼ö°¡ ¾ø´Ù.