¶ó. ÀÚµ¿°³Çà Áö¿ø

¿©±â±îÁö ÀÚµ¿°³Çà ±â´ÉÀÇ ÇÙ½É ÇÔ¼öÀÎ GetLineSub ÇÔ¼ö¸¦ ÀÛ¼ºÇß´Ù. ÁÙÀÇ ³¡À» Á¦´ë·Î ãÀ» ¼ö ÀÖ°Ô µÇ¾úÀ¸¹Ç·Î ÀÌÁ¦ °ÅÀÇ ´Ù ¸¸µç °Å³ª ´Ù¸§¾ø°í ¸î¸î °ü·Ã ÇÔ¼öµé¸¸ °íÄ¡¸é µÈ´Ù. ÁÙ ³¡À» ã±â¸¸ ÇÑ´Ù°í Çؼ­ ÀÚµ¿°³ÇàÀÌ µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ´Ù¸¥ ÇÔ¼öµéµµ GetLineSub°¡ ã¾Æ³õÀº ÁÙ ³¡ Á¤º¸¸¦ Àß ÀÌ¿ëÇϵµ·Ï ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù.

GetLine ÇÔ¼ö ¼öÁ¤

¸ÕÀú GetLine ÇÔ¼öÀÇ p+=2¸¦ ´ÙÀ½ ÄÚµå·Î ¼öÁ¤ÇÑ´Ù.

 

void GetLine(int Line, int &s, int &e)

{

     ....

          if (*p == ¡®\r¡¯) {

               p+=2;

          }

 

p+=2´Â ÁÙÀÇ ³¡À» ãÀº ÈÄ¿¡ ´ÙÀ½ ÁÙÀÇ Ã³À½À¸·Î À̵¿Çϱâ À§ÇØ \r\nÀ» °Ç³Ê ¶Ù´Â ÄÚµåÀÌ´Ù. ±×·¯³ª ÀÚµ¿°³ÇàÀÌ µÇ´Â Áö±ÝÀº ¹«Á¶°Ç µÎ Ä­ µÚ·Î À̵¿Çؼ­´Â ¾ÈµÇ¸é °³ÇàÄڵ忡 ÀÇÇØ °­Á¦ °³ÇàµÈ °æ¿ì¸¸ À̵¿ÇØ¾ß ÇÑ´Ù. ÀÚµ¿°³ÇàµÈ °æ¿ì´Â ¾ÆÁ÷ ¹°¸®ÀûÀÎ ÁÙÀÌ ¿ÏÀüÈ÷ ³¡³ªÁö ¾Ê¾ÒÀ¸¸ç ¹Ù·Î µÚ¿¡ ¹®ÀÚ°¡ °è¼Ó ÀÖ´Ù.

ÀÚµ¿°³ÇàµÈ °æ¿ì ¾Õ ÁÙÀÇ ³¡Àº ´ÙÀ½ ÁÙÀÇ ½ÃÀÛ°ú °°Àº À§Ä¡°¡ µÈ´Ù. ±×·¡¼­ ÀÌ °æ¿ì´Â p+=2¸¦ ½ÇÇàÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù.

GetRCFromOff ÇÔ¼ö ¼öÁ¤

¿ÀÇÁ¼ÂÀ¸·ÎºÎÅÍ Çà·ÄÀ» ã´Â ÇÔ¼öµµ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù.

 

void GetRCFromOff(int nPos, int &r, int &c)

{

     int s,e;

     TCHAR *p=buf;

     r=0;

 

     if (nWrap==0) {

          while (p-buf != nPos) {

               if (*p==¡®\r¡¯)

                   r++;

               p++;

          }

          GetLine(r,s,e);

     } else {

          for (;;r++) {

               GetLine(r,s,e);

               if (nPos >= s && nPos < e)

                   break;

 

               if (nPos == e) {

                   if (buf[e] == 0 || buf[e] == ¡®\r¡¯) {

                        break;

                   }

               }

          }

     }

 

     c=nPos-s;

}

 

ÀÚµ¿°³ÇàÀ» ÇÏÁö ¾ÊÀ» °æ¿ìÀÇ ÄÚµå´Â ÀÌÀü°ú µ¿ÀÏÇÏ¸ç ¿£ÅÍÄÚµåÀÇ °³¼ö¸¦ ¼¼¸é ÁÙ¹øÈ£¸¦ ±¸ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÚµ¿°³Çà »óÅ¿¡¼­´Â ÇÑ ÁÙÀÌ È­¸é»ó¿¡ ¿©·¯ ÁٷΠǥ½ÃµÉ ¼ö Àֱ⠶§¹®¿¡ ¿£ÅÍÄڵ带 ¼¼´Â °Í¸¸À¸·Î´Â ÁÙ¹øÈ£¸¦ ±¸ÇÒ ¼ö ¾ø´Ù.

GetLineÀ¸·Î ÁÙÀÇ ¹üÀ§¸¦ °Ë»çÇÏ°í nPos°¡ ÀÌ ¹üÀ§¾È¿¡ ÀÖÀ» ¶§±îÁö °è¼Ó ÁÙÀ» Áõ°¡½ÃÅ°¸é nPos°¡ ¸î ¹ø° ÁÙ¿¡ ÀÖ´ÂÁö ¾Ë ¼ö ÀÖ´Ù. GetLineÀÌ ÀÚµ¿°³Çà »óŸ¦ °í·ÁÇÏ¿© ÁÙÀÇ ¹üÀ§¸¦ ¾Ë¾Æ¼­ Á¶»çÇϱ⠶§¹®ÀÌ´Ù. ´Ü, °³ÇàÄÚµå¿Í ¹®¼­ ³¡Àº GetLineÀÌ ÁÙÀÇ ¹üÀ§¿¡¼­ Á¦¿ÜÇϹǷΠµû·Î °Ë»çÇØ¾ß ÇÑ´Ù. ÀÌ °Ë»ç¸¦ »ý·«Çϸé nPos°¡ ¿£ÅÍÄÚµåÀÏ °æ¿ì ÀÌ ÁÙÀº ¿µ¿øÈ÷ ¸ø ã°Ô µÉ °ÍÀÌ´Ù.

±×·¯³ª ÀÌ °Ë»ç¸¦ ¸Å¹ø ¼öÇàÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¿Ö³ÄÇÏ¸é °³ÇàÄÚµå¿Í ¹®¼­ÀÇ ³¡Àº ÁÙÀÇ ³¡ À§Ä¡ÀÎ e¿¡¼­¸¸ ³ªÅ¸³¯ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÁÙÀÇ Áß°£¿¡ °³ÇàÄڵ尡 ÀÖ´Ù¸é ±×°ÍÀº Á¤·Ä·çƾÀÌ À߸øµÇ¾ú´Ù´Â ¶æÀÌ´Ù. nPos°¡ eÀÎ °æ¿ì¸¸ °Ë»çÇÏ¸é µÇ¸ç ÀÌ °Ë»ç·Î ÀÎÇÑ ¼Óµµ»óÀÇ ºÒÀÌÀÍÀº °ÅÀÇ ¾ø´Ù.

ÀÌ ÇÔ¼ö´Â ÀÚµ¿°³Çà »óÅÂÀÎ °æ¿ì¿Í ±×·¸Áö ¾ÊÀº °æ¿ìÀÇ Äڵ带 µû·Î ½ÇÇàÇÏ°í ÀÖ´Ù. »ç½Ç ÀÚµ¿°³Çà »óÅ°¡ ¾Æ´Ñ °æ¿ì¶óµµ ÀÚµ¿°³ÇàµÈ °æ¿ìÀÇ ÄÚµå·Î ÁÙ¹øÈ£¸¦ Á¶»çÇÒ ¼ö ÀÖ´Ù. GetLineÀÌ ÀÌ¹Ì ÀÚµ¿°³Çà »óŸ¦ °í·ÁÇÏ¿© ÁÙ ¹üÀ§¸¦ Á¶»çÇϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ±»ÀÌ ÀÌ µÎ Äڵ带 µû·Î µÎ´Â ÀÌÀ¯´Â ½ÇÇà¼Óµµ¸¦ Á¶±ÝÀÌ¶óµµ Çâ»ó½ÃÅ°±â À§Çؼ­ÀÌ´Ù. ÀÚµ¿°³Çà »óÅ°¡ ¾Æ´Ñ °æ¿ì´Â ±»ÀÌ ´À·ÁÅÍÁø GetLine ÇÔ¼ö¸¦ ºÎ¸¦ ÇÊ¿ä¾øÀÌ ¿£ÅÍÄÚµåÀÇ °³¼ö¸¸ ¼¼¾î º¸¸é µÈ´Ù.

»èÁ¦ ÄÚµå ¼öÁ¤

<Del>Å°·Î ÇöÀç À§Ä¡ÀÇ ¹®ÀÚ¸¦ »èÁ¦ÇÒ ¶§ ¿ÀÇÁ¼ÂÀº º¯°æµÇÁö ¾Ê´Â´Ù. ¹®ÀÚ¸¦ »èÁ¦Çصµ ¿ÀÇÁ¼ÂÀº ¿©ÀüÈ÷ ±× ÀÚ¸®¿¡ ¸Ó¹«¸£°Ô µÇ¸ç µû¶ó¼­ ij·µÀ» ¿Å±æ ÇÊ¿äµµ ¾ø´Ù. ±×·¡¼­ VK_DELETE ó¸®Äڵ忡¼­´Â SetCaretÀ» È£ÃâÇÏÁö ¾Ê¾Ò´Ù. ¹Ý¸é <BS>Å°´Â ¾ÕÂÊ ¹®ÀÚ¸¦ »èÁ¦Çϱ⠶§¹®¿¡ ¿ÀÇÁ¼ÂÀÌ ÀÌÀü ¹®ÀÚ·Î À̵¿ÇÏ°Ô µÇ°í ij·µµµ ¿Å°ÜÁÖ¾î¾ß ÇÑ´Ù.

±×·¯³ª ÀÚµ¿°³Çà ±â´ÉÀÌ µé¾î°¨À¸·Î½á ÀÌ·± »çÁ¤ÀÌ ´Þ¶óÁö°Ô µÈ´Ù. <Del>Å°¸¦ ´©¸¦ ¶§ ¿ÀÇÁ¼ÂÀÌ º¯ÇÏÁö ¾Ê´Â °ÍÀº ¿©ÀüÇÏÁö¸¸ °°Àº ¿ÀÇÁ¼ÂÀÌ¶óµµ Á¤·Ä »óÅ¿¡ µû¶ó ij·µÀÇ À§Ä¡´Â ´Þ¶óÁú ¼ö Àֱ⠶§¹®ÀÌ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.

 

À§¿¡ ÇÑ ÁÙÀÌ ÀÖ°í °³ÇàÇÏÁö ¾ÊÀº »óÅ¿¡¼­ abcde¸¦ ÀÔ·ÂÇߴµ¥ ÀÌ ´Ü¾î°¡ À­ÁÙÀÇ ¿À¸¥ÂÊ ¿©¹é¿¡ µé¾î°¥ ¼ö ¾ø±â ¶§¹®¿¡ ¾Æ·¡ÁÙ·Î ÀÚµ¿°³ÇàµÇ¾ú´Ù. ¡®c¡¯¹®ÀÚ À§Ä¡¿¡ ij·µÀ» µÎ°í <Del>Å°¸¦ ´©¸£¸é ÀÌ ¹®ÀÚ°¡ »èÁ¦µÇ¸é¼­ ¡®abde¡¯°¡ µÇ°í ÀÌ ´Ü¾î´Â À§ÂÊ ¿©¹é¿¡ µé¾î°¥ ¼ö ÀÖ°Ô µÈ´Ù. À̶§ ij·µÀ» ¿Å°ÜÁÖÁö ¾ÊÀ¸¸é ij·µÀÌ Æ²¸° À§Ä¡¸¦ °¡¸®Å°°Ô µÈ´Ù. ¹®ÀÚ¿­Àº Á¤·Ä ±â´É¿¡ ÀÇÇØ À§·Î ¿Ã¶ó°¬´Âµ¥ ij·µÀº ¹®ÀÚ¸¦ µû¶ó °¡Áö ¸øÇÏ´Â °ÍÀÌ´Ù.

ÀÚµ¿°³Çà ±â´É¿¡ ÀÇÇØ ¹®ÀÚ »èÁ¦½Ã Á¤·ÄÀÌ ¹Ù²ð ¼ö ÀÖ°í µû¶ó¼­ VK_DELETE¿¡¼­µµ ij·µÀ» ¿Å°Ü¾ß ÇÑ´Ù. <BS>Å°µµ ¹°·Ð ij·µÀ» ¿Å°Ü¾ß ÇÏÁö¸¸ VK_DELETE¿¡¼­ ij·µÀ» ¿Å°ÜÁֱ⠶§¹®¿¡ VK_BACK¿¡¼­´Â SetCaretÀ» È£ÃâÇÒ ÇÊ¿ä°¡ ¾ø´Ù. VK_BACK¿¡ ÀÖ´Â SetCaret¹®À» VK_DELETE·Î ¿Å°å´Ù.

 

void OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)

{

     ....

     case VK_DELETE:

          if (IsDBCS(buf,off)) {

               Delete(off, 2);

          } else {

               Delete(off, 1);

          }

          InvalidateRect(hWnd,NULL,TRUE);

        SetCaret();

          return;

     case VK_BACK:

          if (off == 0)

               return;

          off=GetPrevOff(off);

          SendMessage(hWnd,WM_KEYDOWN,VK_DELETE,0);

          return;

 

ij·µ À§Ä¡ º¯°æ

ÀÚµ¿°³Çà°ú °ü·ÃµÈ ¸¶Áö¸· ÀÛ¾÷Àº À©µµ¿ìÀÇ Å©±â¸¦ ¹Ù²Ü ¶§ ij·µÀÇ À§Ä¡¸¦ ´Ù½Ã °è»êÇÏ´Â °ÍÀÌ´Ù. ÀÚµ¿°³Çà »óÅ¿¡¼­ À©µµ¿ìÀÇ ÆøÀÌ ¹Ù²î¸é ÀüüÀûÀ¸·Î ¹®¼­°¡ ÀçÁ¤·ÄµÉ °ÍÀÌ°í µû¶ó¼­ ij·µÀÇ À§Ä¡µµ »õ·Î Á¤·ÄµÈ °÷À¸·Î ¿Å°Ü¾ß ÇÑ´Ù. OnSize¿¡¼­ SetCaret ÇÔ¼ö¸¸ È£ÃâÇÏ¸é ³ª¸ÓÁö 󸮴 SetCaretÀÌ ¾Ë¾Æ¼­ ÇÑ´Ù.

 

void OnSize(HWND hWnd, UINT state, int cx, int cy)

{

     if (state != SIZE_MINIMIZED) {

          if (GetFocus()==hWnd) {

               SetCaret();

          }

     }

}

 

´Ü, À©µµ¿ì°¡ ÃÖ¼ÒÈ­ µÉ ¶§´Â SetCaretÀ» ºÎ¸£Áö ¸»¾Æ¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé ÃÖ¼ÒÈ­½Ã À©µµ¿ìÀÇ ÆøÀº 0ÀÌ µÇ°í ÀÌ »óÅ¿¡¼­´Â ¾î¶² Á¤·Äµµ ½ÇÆÐÇÑ´Ù. ÆøÀÌ 0À̹ǷΠ´Ü Çѹ®ÀÚµµ Áý¾î ³ÖÀ» ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. À̶§´Â ±×³É ¾Æ¹« °Íµµ ¾Ê°í °¡¸¸È÷ ÀÖÀ¸¸é µÈ´Ù. ¶ÇÇÑ ÀÌ À©µµ¿ì°¡ Æ÷Ä¿½º¸¦ °¡Áö°í ÀÖÀ» ¶§¸¸ ij·µÀÇ À§Ä¡¸¦ Á¶Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. Æ÷Ä¿½º°¡ ¾øÀ¸¸é ij·µÀÌ º¸ÀÌÁö ¾Ê¾Æ¾ß ÇϹǷΠSetCaretÀ» È£ÃâÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù.

Á¶°Ç ÆÇ´ÜÀÇ ¼ø¼­

GetLineSub ÇÔ¼ö´Â óÀ½ ºÁ¼­ ¹Ù·Î ÀÌÇØ°¡ µÉ ¸¸Å­ °£´ÜÇÏÁö´Â ¾Ê´Ù. ±×·¯³ª °á°ú¸¦ ºÐ¼®Çغ¸¸é ÀÌÇØÇϱ⠾î·Á¿î Á¤µµ´Â ¾Æ´Ï´Ù. °á°ú´Â ÀÌÇØÇß´Ù Ä¡°í ÀÌ ÇÔ¼ö Á¦ÀÛ °úÁ¤¿¡¼­ ¾î¶² ÇÔÁ¤µéÀÌ ÀÖ¾ú´ÂÁö ±¸°æÇغ¸µµ·Ï ÇÏÀÚ.

·çÇÁÀÇ Å»Ãâ Á¶°ÇÀº ¾Õ¿¡¼­ »ìÆì ºÃµíÀÌ ¼¼ °¡Áö°¡ Àִµ¥ ´ëµîÇÑ Á¶°Ç¹® °°Áö¸¸ ÀÌ ¼¼ Á¶°ÇÀ» Á¡°ËÇÏ´Â ¼ø¼­¿¡ Àǹ̰¡ ÀÖ´Ù. \r, \0, Æø³Ñħ ¼ø¼­´ë·Î Á¡°ËÀ» Çϴµ¥ ÀÌ ¼ø¼­¸¦ Æø³Ñħ, \r, \0·Î ¹Ù²Ù¾î º¸µµ·Ï ÇÏÀÚ. ±×¸®°í ´ÙÀ½ ¹®ÀåÀ» ÀÔ·ÂÇغ¸¾Æ¶ó. Áõ¼¼¸¦ Á¤È®ÇÏ°Ô È®ÀÎÇϱâ À§Çؼ­´Â À©µµ¿ì ÆøÀ» ÃʱⰪÀÎ 300À¸·Î ¸ÂÃç ³õ¾Æ¾ß ÇÏ¸ç µðÆúÆ® ½Ã½ºÅÛ ÆùÆ®¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

 

Á¤·Ä Å×½ºÆ® °¡³ª´Ù¶ó¸¶¹Ù»ç¾ÆÀÚÂ÷īŸ. ÀÌ»óÇÏ´Ù.

 

¡®Å¸¡¯ÀÚ±îÁö ÀÔ·ÂÇÑ ÈÄ ¸¶Ä§Ç¥¸¦ ÂïÀ¸¸é ÀÌ ¸¶Ä§Ç¥°¡ ¾Æ·¡ÁÙ·Î ³»·Á°£´Ù. ÀÌ »óÅ¿¡¼­ °ø¹éÀ» ÀÔ·ÂÇÏ¸é ¸¶Ä§Ç¥¿Í °ø¹éÀÌ ´Ù½Ã À§·Î ¿Ã¶ó°£´Ù.

 

ÇÑ ¹ø ³»·Á°£ ±ÛÀÚ°¡ À§·Î ´Ù½Ã ¿Ã¶ó°¡´Â °ÍÀº ¹º°¡ Á¤·Ä Äڵ尡 Á¦´ë·Î µÇ¾î ÀÖÁö ¾Ê±â ¶§¹®ÀÌ´Ù. Á¶°Ç Á¡°ËÀÇ ¼ø¼­¸¦ ¹Ù²Ù¸é ¿Ö ÀÌ·± Çö»óÀÌ ÀϾ´ÂÁö´Â ÄûÁî·Î ³²°Ü µÎ±â·Î ÇÑ´Ù. µð¹ö°Å·Î µð¹ö±ëÇغ¸¸é ±× ÀÌÀ¯¸¦ ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¿©±â±îÁö Äڵ带 ÀÛ¼ºÇÑ ÈÄ ½ÇÇàÇغ¸¸é ÀÚµ¿°³Çà ±â´ÉÀÌ Àß µ¿ÀÛÇÒ °ÍÀÌ´Ù. ÆíÁýâÀÇ ¿À¸¥ÂÊ ³¡¿¡ ´êÀ¸¸é ´ÙÀ½ ÁÙ·Î ¾Ë¾Æ¼­ ³»·Á°¡°í À©µµ¿ì Å©±â°¡ ¹Ù²î¸é ¹®¼­ Àüü°¡ ÀçÁ¤·ÄµÇ¾î ¸ð¾çÀÌ ¿ÏÀüÈ÷ ¹Ù²î°Ô µÉ °ÍÀÌ´Ù.