³ª. »ðÀÔ ¹× »èÁ¦½Ã ¹«È¿¿µ¿ª °ü¸®

¹®¼­°¡ º¯°æµÉ ¶§ ¾î¶² ºÎºÐÀÌ ´Ù½Ã ±×·ÁÁ®¾ß ÇÏ´ÂÁö º¸ÀÚ. °¡±ÞÀûÀÌ¸é ²À ÇÊ¿äÇÑ ºÎºÐ¸¸ ´Ù½Ã ±×·Á¾ß ÇϹǷΠÃÖ¼ÒÇÑ Á¼Àº ¿µ¿ª¸¸ ±×¸®µµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÏ´Ü ´ÙÀ½ ±×¸²À» º¸¾Æ¶ó.

ù ÁÙÀÇ ¡®±¹¡¯ÀÚ¿¡ ij·µÀÌ Àִµ¥ ÀÌ »óÅ¿¡¼­ <Del>Å°¸¦ ´©¸£¸é ÀÌ ±ÛÀÚ°¡ »èÁ¦µÇ°í ±× ÀÚ¸®·Î ¡®°¡¡¯ÀÚ°¡ ¿À°Ô µÉ °ÍÀÌ´Ù. µû¶ó¼­ ù ¹ø° ÁÙÀº ¹Ýµå½Ã ´Ù½Ã ±×·Á¾ß ÇÑ´Ù. ÇÏÁö¸¸ µÎ ¹ø° ÁÙ ÀÌÇϴ ù ¹ø° ÁÙÀÇ º¯È­¿Í ÀüÇô »ó°üÀÌ ¾øÀ¸¹Ç·Î ´Ù½Ã ±×¸± ÇÊ¿ä°¡ ¾ø´Ù. ¡®±¹¡¯ÀÚ ¾Õ¿¡ ´Ù¸¥ ±ÛÀÚ¸¦ ÀÔ·ÂÇÒ ¶§µµ ¸¶Âù°¡Áö·Î ù ¹ø° ÁÙ¸¸ ´Ù½Ã ±×·ÁÁÖ¸é µÈ´Ù. ÇÏÁö¸¸ ´ÙÀ½°ú °°Àº °æ¿ì´Â Á» ´Ù¸£´Ù.

³× ¹ø° ÁÙÀÇ ¡®°­¡¯ÀÚ¿¡ ij·µÀÌ Àִµ¥ ÀÌ »óÅ¿¡¼­ <Del>Å°¸¦ ´©¸£¸é ¾Æ·§ÁÙÀÇ ¡®¼¼¡¯ÀÚ°¡ À­ÁÙ·Î ¿Ã¶ó¿Í¾ß ÇÏ°í ÀÌÈÄÀÇ Áٵ鵵 ¿¬¼ÓÀûÀ¸·Î ÇÑ Ä­¾¿ À§·Î À̵¿µÇ¾î¾ß ÇÑ´Ù. À̶§´Â »ðÀÔ, »èÁ¦°¡ ÀϾ ÁÙ »Ó¸¸ ¾Æ´Ï¶ó ±× ÀÌÈÄÀÇ Áٵ鵵 ´Ù½Ã ±×·ÁÁ®¾ß ÇϹǷΠÆíÁýµÈ ÁÙ ÀÌÇÏÀÇ ¸ðµç ÁÙÀÌ ¹«È¿¿µ¿ªÀÌ µÇ¾î¾ß ÇÑ´Ù. À§ ±×¸²ÀÇ °æ¿ì ³× ¹ø° ÁÙ ¡®¹«±ÃÈ­~¡¯ ÀÌÈĺÎÅÍ ´Ù½Ã ±×·Á¾ß ÇÏ¸ç ±× ÀÌÀü ÁÙÀº ´Ù½Ã ±×¸± ÇÊ¿ä°¡ ¾ø´Ù. ¹®¼­ÀÇ ÇÑ ºÎºÐÀ» ÆíÁýÇßÀ» ¶§ ±× ÀÌÈÄ ºÎºÐÀº ¾î¶² º¯È­°¡ ÀÖÀ» ¼öµµ ÀÖ°í ¾øÀ» ¼öµµ ÀÖÁö¸¸ ±× ÀÌÀü ºÎºÐÀº º¯ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. °ú¿¬ Ç×»ó ±×·²±î? ´ÙÀ½ÀÇ °æ¿ì¸¦ º¸ÀÚ.

 

ÇѱÛÀº ±ÛÀÚ Á¤·ÄµÇ¾î ÀÖ°í ¿µ¹®Àº ´Ü¾î Á¤·ÄµÇ¾î ÀÖÀ¸¸ç PÀÚ¿¡ ij·µÀÌ ÀÖ´Ù. ÀÌ »óÅ¿¡¼­ P¸¦ »èÁ¦Çϸé Reaint¶ó´Â ´Ü¾î°¡ À­ÁÙ·Î ¿Ã¶ó°¡ ºÙ´Â´Ù. RePaint´Â À­ÁÙ ¿©¹é¿¡ ¾È µé¾î°¡±â ¶§¹®¿¡ °­Á¦ °³ÇàµÇ¾úÁö¸¸ ÇÑ ±ÛÀÚ°¡ »èÁ¦µÊÀ¸·Î½á Á¤·Ä »óÅ°¡ ¹Ù²ï °ÍÀÌ´Ù. º¸´Ù½ÃÇÇ ÆíÁýµÈ ÁÙÀÇ ÀÌÀü ÁÙµµ º¯È­°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ´Ü, ÀÌ °æ¿ìµµ °°Àº ¹®´Ü ³»¿¡¼­¸¸ º¯È­°¡ ÀÖÀ» »Ó ¼¼ ¹ø° ÁÙ ÀÌÀüÀº ÀüÇô º¯È­°¡ ¾ø´Ù.

Á¤¸®ÇÏÀÚ¸é ¹®¼­ÆíÁý¿¡ ÀÇÇØ ¹«È¿È­µÇ¾î¾ß ÇÒ °¡Àå ÀÛ°íµµ ¾ÈÀüÇÑ ¿µ¿ªÀº ÆíÁýµÈ À§Ä¡°¡ ¼ÓÇÑ ¹®´Ü ÀÌÈĺÎÅÍ È­¸é ¾Æ·¡±îÁöÀÌ´Ù. ¿¹·Î º¸ÀÎ ±×¸²Àº ÆíÁý È­¸éÀÌ À۾Ƽ­ º° ¼Óµµ Çâ»ó È¿°ú°¡ ¾øÀ» °Íó·³ º¸ÀÌÁö¸¸ ¹®¼­¸¦ ÀÔ·ÂÇÒ ¶§ ij·µÀº ´ëºÎºÐ È­¸é ¾Æ·¡ÂÊ¿¡ ÀÖÀ¸¹Ç·Î ÀÌ Á¤µµ·Î¸¸ ¹«È¿¿µ¿ªÀ» Á¼°Ô ¸¸µé¾îµµ ´ë´ÜÇÑ ¼Óµµ Çâ»ó È¿°ú°¡ ÀÖ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ¹«È¿¿µ¿ª ¼³Á¤À» À§ÇÑ µµ¿ì¹Ì ÇÔ¼öÀÌ´Ù.

 

int FindParaStart(int nPos)

{

     int n;

 

     if (nPos==0) {

          return 0;

     }

 

     for (n=nPos-1;n!=0;n--) {

          if (buf[n]==¡®\r¡¯ && buf[n+1]==¡®\n¡¯) {

               n+=2;

               break;

          }

     }

 

     return n;

}

 

nPos¸¦ ÁÖ¸é ÀÌ ¿ÀÇÁ¼ÂÀÌ ¼ÓÇØ ÀÖ´Â ¹®´ÜÀÇ ¼±µÎ ¿ÀÇÁ¼ÂÀ» ã¾ÆÁØ´Ù. Áï ÀÌ ÇÔ¼ö°¡ ã¾Æ ÁÖ´Â ¿ÀÇÁ¼Â ÀÌÈĺÎÅÍ ¹«È¿È­ÇÏ¸é ¾ÈÀüÇÏ´Ù. ±×·³ ÀÌÁ¦ ¹®¼­ÆíÁý½Ã¿¡ ¹«È¿¿µ¿ªÀ» ½ÇÁ¦·Î Àû¿ëÇغ¸µµ·Ï ÇÏÀÚ. ¸ÕÀú »èÁ¦ÇÒ ¶§ÀÎ VK_DELETE, VK_BACKÀÇ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

     case VK_DELETE:

          ....

        Invalidate(FindParaStart(off));

          SetCaret();

          return;

     case VK_BACK:

          ....

        Invalidate(FindParaStart(off));

          SetCaret();

          return;

 

Å« º¯È­´Â ¾ø°í InvalidateRect(hWnd,NULL,TRUE)°¡ Invalidate(FindParaStart(off))·Î ¹Ù²î±â¸¸ Çß´Ù. ÀÛ¾÷¿µ¿ª Àüü¸¦ ´Ù ¹«È¿È­½ÃÅ°´Â °ÍÀÌ ¾Æ´Ï¶ó »èÁ¦µÈ ¿ÀÇÁ¼ÂÀÌ ¼ÓÇÑ ¹®´ÜÀÇ Ã¹ ÁÙ ÀÌÈĺÎÅÍ È­¸é ³¡±îÁö ¹«È¿È­µÈ´Ù. ¾Õ¿¡¼­ ¼³¸íÇÑ´ë·Î ÆíÁýÀÌ ÀϾ À§Ä¡¿¡¼­ º¯È­°¡ »ý±æ °¡´É¼ºÀÌ ÀÖ´Â °¡Àå Á¼Àº ¿µ¿ªÀ» ¹«È¿¿µ¿ªÀ¸·Î ¼³Á¤ÇÑ °ÍÀÌ´Ù.

´ÙÀ½Àº ¹®ÀÚ¸¦ »ðÀÔÇÒ ¶§ÀÇ ¹«È¿¿µ¿ª °ü¸®¸¦ º¸ÀÚ. »èÁ¦´Â ÇÑ ±ºµ¥¼­ ÀϾÁö¸¸ »ðÀÔÀº ¿©·¯ °÷¿¡¼­ ÀϾ´Ù. ¼¼ ±ºµ¥°¡ ÀÖ´Ù.

 

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

{

     ....

     Invalidate(FindParaStart(off-lstrlen(szChar)));

     SetCaret();

}

 

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

{

     ....

     Invalidate(FindParaStart(off-lstrlen(szChar)));

     SetCaret();

     return 0;

}

 

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

{

     ....

          Invalidate(FindParaStart(off-len));

          SetCaret();

     }

 

     return DefWindowProc(hWnd,WM_IME_COMPOSITION,wParam,lParam);

}

 

º¸´Ù½ÃÇÇ InvalidateRect(hWnd,NULL,TRUE)¸¦ Á» ´õ Áö´ÉÀûÀÎ Invalidate·Î ¹Ù²Û °Í¿¡ ºÒ°úÇÏ´Ù. »ðÀÔÇÒ ¶§ÀÇ ±âÁØ À§Ä¡´Â »ðÀÔ ÈÄÀÇ ¿ÀÇÁ¼ÂÀÌ ¾Æ´Ï¶ó »ðÀÔÇϱâ ÀüÀÇ ¿ÀÇÁ¼ÂÀÌ ±âÁØÀÌ´Ù. ¸¸¾à »ðÀÔ ÈÄÀÇ ¿ÀÇÁ¼ÂÀ» ±âÁØÀ¸·Î ÇÑ´Ù¸é ÁÙ Áß°£¿¡¼­ ¿£ÅÍÄڵ尡 ÀԷµǾúÀ» ¶§ Àß·Á ³»·Á°£ ÁÙÀº Á¦´ë·Î Ãâ·ÂµÇÁö¸¸ À­ÁÙÀº °»½ÅµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.

¸í½ÃÀûÀÎ »ðÀÔ°ú »èÁ¦ ¿Ü¿¡ ¹®¼­¸¦ ÆíÁýÇÏ´Â ºÎºÐÀ¸·Î À߶󳻱â¿Í ºÙ¿©³Ö±â°¡ ÀÖ´Ù. ÀÌ µÎ ºÎºÐµµ ÀÛ¾÷¿µ¿ª Àüü¸¦ ¹«È¿È­ÇÒ ÇÊ¿ä¾øÀÌ º¯È­°¡ ÀÖ´Â ºÎºÐ¸¸ ¹«È¿È­Çß´Ù.

 

     case IDM_AE_CUT:

          if (SelStart != SelEnd) {

               SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDM_AE_COPY,0),0);

               DeleteSelection();

            Invalidate(FindParaStart(off));

               SetCaret();

          }

          return;

     case IDM_AE_PASTE:

          if (IsClipboardFormatAvailable(CF_TEXT)) {

               DeleteSelection();

               OpenClipboard(hWnd);

               hmem=GetClipboardData(CF_TEXT);

               ptr=(TCHAR *)GlobalLock(hmem);

               Insert(off,ptr);

               GlobalUnlock(hmem);

               CloseClipboard();

            Invalidate(FindParaStart(off));

               off += lstrlen(ptr);

               SetCaret();

          }

          return;

 

À߶󳻱âÀÇ °æ¿ì DeleteSelection ÇÔ¼ö¿¡ ÀÇÇØ ¼±Åÿµ¿ªÀÇ Ã¹ ºÎºÐÀÌ ÇöÀç À§Ä¡°¡ µÇ¾î ÀÖÀ¸¹Ç·Î ÇöÀç À§Ä¡ ÀÌÈĺÎÅÍ ¹«È¿È­¸¦ ÇÏ¸é µÈ´Ù. ºÙ¿©³Ö±â¸¦ ÇÒ ¶§´Â ºÙ¿©³Ö±â ÀüÀÇ ÇöÀç À§Ä¡ºÎÅÍ ¹«È¿È­½ÃÄÑ¾ß ÇÑ´Ù.

¹®¼­¸¦ º¯°æÇÏ´Â ÇÔ¼öµéÀ» ¼öÁ¤ÇÏ¿© ¹«È¿È­µÇ´Â ¿µ¿ªÀ» °¡±ÞÀûÀ̸é Á¼°Ô ¼³Á¤ÇÏ°í Àִµ¥ ÀÚÄ© À߸ø °è»êÇÏ¸é ºÎÀÛ¿ëÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¹«È¿¿µ¿ªÀ» Á¼°Ô ÇÏ´Ù º¸¸é ¹Ýµå½Ã ±×·Á¾ß ÇÒ ºÎºÐÀÌ ¹«È¿¿µ¿ª¿¡¼­ Á¦¿ÜµÇ¹ö¸®´Â °æ¿ì°¡ Àִµ¥ ÀÌ·¸°Ô µÇ¸é È­¸éÀÇ Ãâ·Â ³»¿ëÀÌ ¹®¼­ÀÇ »óŸ¦ Á¤È®ÇÏ°Ô º¸¿©ÁÖÁö ¸øÇÏ°Ô µÈ´Ù. ¾Õ¼­ ÀÛ¼ºÇÑ ÇÔ¼öµéÀº ÀÚ½ÅÀÌ º¯°æÇÑ ºÎºÐ¿¡ ´ëÇؼ­´Â ¾ÈÀüÇÑ ¹üÀ§ÀÇ ¹«È¿¿µ¿ªÀ» Á¤È®ÇÏ°Ô ¼³Á¤ÇÏ°í ÀÖÁö¸¸ ¿¹¿Ü Äڵ忡 ÀÇÇØ ¹«È¿¿µ¿ªÀÇ ºÒÀÏÄ¡°¡ ¹ß»ýÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ¾î¶² °æ¿ìÀΰ¡ ÇÏ¸é »èÁ¦¿¡ ÀÇÇØ °­Á¦ ½ºÅ©·ÑµÉ ¶§ÀÌ´Ù.

 

void CApiEdit::UpdateScrollInfo()

{

     ....

     if (si.nMax < (int)si.nPage) {

          yPos=0;

        Invalidate(-1);

     }

 

ÀÌ ÄÚµå´Â ApiEdit3¿¡¼­ ÀÛ¼ºÇß´ø ¿¹¿Ü ó¸®ÄÚµåÀε¥ »èÁ¦ ÈÄ ½ºÅ©·Ñ¹Ù°¡ µð½º¿¡À̺íµÇ¸é °­Á¦·Î À§·Î ½ºÅ©·Ñ½ÃÄÑ ¹®¼­ Àüü°¡ º¸À̵µ·Ï ÇÑ´Ù. ÀÌ °æ¿ì Delete ÇÔ¼ö°¡ ãÀº ¹«È¿¿µ¿ªÀº ½ºÅ©·ÑÀ» ¹Ìó °è»êÇÏÁö ¸øÇÑ °ÍÀ̹ǷΠÀüü ¹«È¿È­¸¦ ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿¹¿ÜÀûÀÎ »óȲÀ» ó¸®ÇÏ°í Àֱ⠶§¹®¿¡ ¹«È¿¿µ¿ª ¼³Á¤¿¡ ´ëÇؼ­µµ ¿ª½Ã ¿¹¿Ü󸮸¦ ÇØ¾ß ÇÑ´Ù.