¸¶. »óÇÏ À̵¿

¿©·¯ ÁÙÀ» ÆíÁýÇÒ ¼ö ÀÖ°Ô µÇ¾úÀ¸´Ï ÀÌÁ¦ ´ç¿¬È÷ ¾Æ·¡À§·Îµµ À̵¿ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¾Æ·¡ÂÊÀ̳ª À§ÂÊÀ̳ª ³í¸®´Â ºñ½ÁÇϹǷΠ¾Æ·¡ÂÊ À̵¿À» ÁßÁ¡ÀûÀ¸·Î »ìÆì º¸µµ·Ï ÇÏÀÚ. °³³äÀûÀ¸·Î ÇÑ Ä­ ¾Æ·¡·Î ³»·Á °£´Ù´Â °ÍÀº ¾ÆÁÖ ½±´Ù. ÁÙ¹øÈ£¸¸ Çϳª Áõ°¡½ÃÄÑ ÁÖ°í ¿­¹øÈ£´Â ±×´ë·Î À¯ÁöÇÏ¸é µÈ´Ù.

¿ÞÂÊ ±×¸²¿¡¼­ ù ¹ø° ÁÙ ¼¼ ¹ø° Ä­ ¡®Áý¡¯ÀÚ°¡ ÇöÀç À§Ä¡¶ó¸é µÎ ¹ø° ÁÙ ¼¼ ¹ø° Ä­ÀÎ ¡®¸®¡¯ÀÚ·Î À̵¿ÇÏ¸é µÇ´Â °ÍÀÌ´Ù. ±×·¯³ª ¹®Á¦°¡ ÀÖ´Ù. ¿À¸¥ÂÊ ±×¸²Ã³·³ ¹Ù·Î ¾Æ·¡ ÁÙ¿¡ ´ëÀÀµÇ´Â Ä­ÀÌ ¾ø´Â °æ¿ì°¡ ÀÖÀ» ¼ö Àִµ¥ À̶§´Â ¾Æ·¡ ÁÙ ³¡À¸·Î À̵¿ÇØ¾ß ÇÑ´Ù. ¸Þ¸ðÀåÀ̳ª ´Ù¸¥ ÆíÁý±âÀÇ µ¿ÀÛÀ» º¸¸é ÀÌ·± 󸮸¦ ½±°Ô È®ÀÎÇÒ ¼ö ÀÖ´Ù. ´ÙÇàÈ÷ ÀÌ Ã³¸®´Â ÀÌ¹Ì GetOffFromRC¿¡¼­ ÇÏ°í ÀÖÀ¸¹Ç·Î »óÇÏÀ̵¿ ÄÚµå´Â ´õ ÀÌ»ó ÀÌ ¹®Á¦¸¦ ½Å°æ¾²Áö ¾Ê¾Æµµ µÈ´Ù.

»óÇÏÀ̵¿ µÑ ´Ù ¹üÀ§ Á¡°ËÀº ²À ÇØ¾ß ÇÑ´Ù. Á¦ÀÏ Ã¹ ÁÙ¿¡¼­´Â ´õ ÀÌ»ó ¿Ã¶ó°¥ °÷ÀÌ ¾ø°í Á¦ÀÏ ¾Æ·¡ÁÙ¿¡¼­´Â ´õ ³»·Á°¥ °÷ÀÌ ¾ø´Ù. ù ÁÙÀΰ¡´Â GetRCFromOff·Î Çà¿­À» Á¶»çÇÑ ÈÄ rÀÌ 0ÀÎÁö º¸¸é µÇ¹Ç·Î °£´ÜÇÏ´Ù. ÇÏÁö¸¸ ¸¶Áö¸· ÁÙÀÎÁö´Â ¾ÆÁ÷ ¾Ë ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾øÀ¸¹Ç·Î ¹®¼­ÀÇ ÁÙ ±æÀ̸¦ Á¶»çÇÏ´Â ÇÔ¼ö GetRowCount ÇÔ¼ö¸¦ ¸¸µéµµ·Ï ÇÏÀÚ.

 

int GetRowCount()

{

     int l,s,e;

 

     for (l=0;;l++) {

          GetLine(l,s,e);

          if (s==-1)

               break;

     }

 

     return l;

}

 

GetLineÀ» ¹Ýº¹ÀûÀ¸·Î È£ÃâÇÏ´Ù°¡ s°¡ -1ÀÌ µÇ´Â ½ÃÁ¡¿¡¼­ Å»ÃâÇÏ¸é ¹®¼­ÀÇ ÁÙ ¼ö¸¦ ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö·Î Á¶»çÇÏ´Â °ªÀº ¹®¼­ÀÇ ÁÙ ¼öÀÌÁö ¸¶Áö¸· ³¡ ÁÙÀÌ ¾Æ´Ï´Ù. ³¡ ÁÙÀº ÁÙ ¼ö¿¡¼­ 1À» »©¾ß ÇÑ´Ù. ¿ÀÇÁ¼Â °ª°ú Çà¿­°ªÀ» º¯È¯ÇÏ´Â ÇÔ¼ö, ¹®¼­ÀÇ ÁÙ ¼ö¸¦ ±¸ÇÏ´Â ÇÔ¼öµéÀ» ÀÌ¹Ì ¸¸µé¾î µÎ¾úÀ¸¹Ç·Î ÀÌÁ¦ »óÇÏÀ̵¿Àº °ÅÀú ¸Ô±â´Ù. ¾Æ·¡, À§·Î À̵¿ÇÏ´Â ÀýÂ÷¸¦ Á¤¸®Çغ¸¾Ò´Ù.

 

¾Æ·¡ÂÊ À̵¿

À§ÂÊ À̵¿

¨ç ÇöÀç Çà·Ä°ª ±¸ÇÔ

¨è rÀ» 1Áõ°¡½ÃÅ´. Áï ¾Æ·¡ÁÙ·Î

¨é ´ëÀÀµÇ´Â ¿ÀÇÁ¼ÂÀ» ±¸ÇÔ

¨ê ij·µÀ» »õ À§Ä¡·Î À̵¿½ÃÅ´

 

´Ü, ÇöÀç ÁÙÀÌ Á¦ÀÏ ³¡ ÁÙÀÎ °æ¿ì´Â Á¦¿Ü

¨ç ÇöÀç Çà·Ä°ª ±¸ÇÔ

¨è rÀ» 1°¨¼Ò½ÃŲ. Áï À­ÁÙ·Î

¨é ´ëÀÀµÇ´Â ¿ÀÇÁ¼ÂÀ» ±¸ÇÔ

¨ê ij·µÀ» »õ À§Ä¡·Î ¿Å±è

 

´Ü, ÇöÀç ÁÙÀÌ Ã¹ ÁÙÀÎ °æ¿ì´Â Á¦¿Ü

 

Áö±ØÈ÷ »ó½ÄÀûÀ̹ǷΠ½±°Ô ÀÌÇØµÉ °ÍÀ̸ç ÀÌ ÀýÂ÷¸¦ ±×´ë·Î ÇÔ¼öÀÇ ÄÚµå·Î ¿Å±â±â¸¸ ÇÏ¸é µÈ´Ù. OnKey ÇÔ¼ö¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÏÀÚ.

 

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

{

    int r,c;

 

     if (fDown==FALSE)

          return;

 

     switch (vk)

     {

     ....

    case VK_UP:

        GetRCFromOff(off,r,c);

        if (r > 0) {

            r--;

            off=GetOffFromRC(r,c);

            SetCaret();

        }

        return;

    case VK_DOWN:

        GetRCFromOff(off,r,c);

        if (r < GetRowCount()-1) {

            r++;

            off=GetOffFromRC(r,c);

            SetCaret();

        }

        return;

 

±×·±µ¥ ÀÌ·¸°Ô ´Ü¼øÇÑ ¹æ¹ýÀ¸·Î ¾Æ·¡À§·Î À̵¿ÇÏ¸é ´ÙÀ½ ±×¸²Ã³·³ ÇѱÛÀÇ Áß°£¿¡ ij·µÀÌ À§Ä¡ÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ ±×¸²Àº ù ¹ø° ÁÙÀÇ ¡®À»¡¯ÀÚ ´ÙÀ½ À§Ä¡¿¡¼­ ¾Æ·¡·Î À̵¿ÇÑ °á°úÀÌ´Ù.

¡®À»¡¯ÀÚ ´ÙÀ½ÀÇ °ø¹é À§Ä¡´Â ¿­¹øÈ£°¡ 6¹øÀÌ´Ù. ±×·±µ¥ µÎ ¹ø° ÁÙÀÇ 6¿­Àº ¡®°¡¡¯ÀÚÀÇ Áß°£¿¡ °ÉÄ¡°Ô µÈ´Ù. GetOffFromRC°¡ ±ÛÀÚÀÇ °æ°èÀÎÁö´Â º¸Áö ¾Ê°í ´Ü¼øÈ÷ ½ÃÀÛÀ§Ä¡¿¡ ¿­¹øÈ£¸¸ ´õÇؼ­ ¿ÀÇÁ¼ÂÀ» ±¸Çϱ⠶§¹®ÀÌ´Ù. ÀÌ ¹ö±×´Â ÇöÀç ±¸Á¶·Î´Â °íÄ¡±â ¾î·Æ°í ¹Ù·Î ´ÙÀ½ ¹ø ¿¹Á¦¿¡¼­ ¼öÁ¤ÇÒ °ÍÀÌ´Ù. ÀÏ´ÜÀº ±×³É ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.

¿©·¯ ÁÙÀ» ÆíÁýÇÒ ¼ö ÀÖ°Ô µÇ¾ú´õ¶óµµ Á¿ìÀ̵¿ ÄÚµå´Â °Çµå¸± ÇÊ¿ä°¡ ¾ø´Ù. ¿Ö³ÄÇÏ¸é  IsDBCS ÇÔ¼ö°¡ Enter Äڵ带 ÀνÄÇϵµ·Ï ¼öÁ¤µÇ¾ú°í GetNextOff, GetPrevOff ÇÔ¼ö°¡ °³ÇàÄÚµåÀÇ ±æÀ̸¸Å­ Àß À̵¿ÇÏ°í Àֱ⠶§¹®ÀÌ´Ù. ÁÙÀÇ Ã³À½°ú ³¡À¸·Î À̵¿ÇÏ´Â Home, EndÀÇ ÄÚµå´Â ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù. ÇÑ ÁÙ¸¸ ÀÖÀ» ¶§´Â ¹«Á¶°Ç ¹öÆÛÀÇ Ã³À½, ¶Ç´Â ¹öÆÛÀÇ ³¡À¸·Î À̵¿ÇÏ¸é µÇÁö¸¸ ¿©·¯ ÁÙÀÏ ¶§´Â ÇöÀç ÁÙÀÇ Ã³À½°ú ³¡À¸·Î À̵¿ÇØ¾ß ÇÑ´Ù.

 

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

{

     ....

     case VK_HOME:

          GetRCFromOff(off,r,c);

          off=GetOffFromRC(r,0);

          SetCaret();

          return;

     case VK_END:

          GetRCFromOff(off,r,c);

          off=GetOffFromRC(r,1000000);

          SetCaret();

          return;

 

HomeÀÇ °æ¿ì ÇöÀç ÁÙ¹øÈ£¸¦ ±¸ÇÑ ÈÄ GetOffFromRC(r,0)À» È£ÃâÇϸé ÁÙÀÇ Ã³À½ À§Ä¡·Î À̵¿ÇÒ °ÍÀÌ´Ù. EndÀÇ °æ¿ì ÁÙ ³¡ÀÇ ¿­¹øÈ£¸¦ Á¤È®È÷ Á¶»çÇؼ­ À̵¿ÇÏ´Â °Íº¸´Ù´Â GetOffFromRC(r,1000000)À¸·Î Á¦ÀÏ µÚÂÊÀ¸·Î À̵¿Çϵµ·Ï ÇÏ¿´´Ù. À̶§ 1000000À̶ó´Â ¿­¹øÈ£´Â Ưº°ÇÑ Àǹ̰¡ ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó ´Ü¼øÈ÷ ÃæºÐÈ÷ Å« °ªÀ» ÀǹÌÇÑ´Ù. GetOffFromRC´Â ¿­¹øÈ£°¡ ÁÙÀÇ ³¡º¸´Ù ´õ Ŭ °æ¿ì ÁÙ ³¡ÀÇ ¿ÀÇÁ¼ÂÀ» ã¾ÆÁֱ⠶§¹®¿¡ ÀÌ·¸°Ô Çصµ ÀüÇô ¹«¸®°¡ ¾ø´Ù.

 

ÀÌ»óÀ¸·Î ¿©·¯ ÁÙ ÆíÁýÀÌ °¡´ÉÇÑ ApiEdit1 ¿¹Á¦ÀÇ ÀÛ¼ºÀ» ¸¶Ä£´Ù. ¾ÆÁ÷ ÆíÁý±â¶ó°í ÇÒ¸¸ÇÑ ±â´ÉµéÀ» º°·Î °¡Áö°í ÀÖÁö ¾ÊÁö¸¸ ÀÌ ¿¹Á¦´Â ¾ÕÀ¸·Î ¸¸µé ¿¹Á¦µéÀÇ ¿øÇüÀ̹ǷΠÀû¾îµµ ÀÌ ¿¹Á¦ÀÇ ÄÚµå´Â ¿Ïº®ÇÏ°Ô ÀÌÇØÇÏ°í ³Ñ¾î°¡¾ß ´ÙÀ½ ½Ç½ÀÀ» Çϴµ¥ ºÒÆíÇÔÀÌ ¾ø´Ù. Á» ½Ã°£ÀÌ °É¸®´õ¶óµµ ÇÔ¼ö Çϳª Çϳª¸¦ ½º½º·Î ºÐ¼®Çغ¸°í Á¤¸®ÇÑ ÈÄ ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.

ƯÈ÷ ÀÌ ¿¹Á¦¿¡¼­ ´«¿©°Ü º¼ °ÍÀº ÆíÁý±â Á¦ÀÛ¿¡ ÇÊ¿äÇÑ À¯Æ¿¸®Æ¼ ÇÔ¼ö ÁýÇÕÀ» Á¤ÀÇÇß´Ù´Â Á¡ÀÌ´Ù. ÀÌ ÇÔ¼öµéÀº ¾ÕÀ¸·Î ±â´ÉÀ» È®ÀåÇÏ´Â ÁÖ¿äÇÑ µµ±¸°¡ µÇ¸ç ¶ÇÇÑ ±× ÀÚü°¡ È®ÀåÀÇ ´ë»óÀ̱⵵ ÇÏ´Ù. ÇÔ¼öÀÇ ÄÚµå ÀÚüµµ Áß¿äÇÏÁö¸¸ ±× º¸´Ù´Â ¿Ö ÀÌ·± ÇÔ¼öµéÀÌ ÇÊ¿äÇÑÁö¸¦ ÀÌÇØÇÏ°í ÇÔ¼öÀÇ ÀԷ°ú Ãâ·ÂÀ» ¾î¶»°Ô ¼³°èÇسõ¾Ò´ÂÁö¸¦ »ìÆ캸´Â °ÍÀÌ ´õ Áß¿äÇÏ´Ù.