´Ù. »óÇÏ À̵¿

»óÇÏÀ̵¿µµ º°·Î Ưº°ÇÑ °ÍÀº ¾øÀ¸¹Ç·Î ¹Ù·Î Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ. µÎ ÄÚµå´Â À¯»çÇϹǷΠVK_UPÀÇ Äڵ常 ÁßÁ¡ÀûÀ¸·Î ºÐ¼®Çغ¸¸é µÈ´Ù.

 

     case VK_UP:

        if (bControl && bShift)

            return;

          GetRCFromOff(off,r,c);

          if (r > 0) {

            if (bControl) {

               SendMessage(hWnd, WM_VSCROLL, SB_LINEUP, 0L);

               if (r != (crt.bottom+yPos)/LineHeight)

                   return;

            }

            OldOff=off;

               r--;

               off=GetXPosOnLine(r,PrevX);

            if (bShift) {

               ExpandSelection(OldOff,off);

            } else {

               if (SelStart != SelEnd) {

                   off=min(SelStart, SelEnd);

                   ClearSelection();

                   SetCaret();

                   SendMessage(hWnd,WM_KEYDOWN,VK_UP,(LPARAM)0);

               }

            }

               SetCaret(FALSE);

          }

 

        if (!bShift) {

            ClearSelection();

        }

          return;

     case VK_DOWN:

        if (bControl && bShift)

            return;

          GetRCFromOff(off,r,c);

        if (bControl) {

            SendMessage(hWnd, WM_VSCROLL, SB_LINEDOWN, 0L);

            if (r != yPos/LineHeight-1) {

               return;

            }

        }

          if (r < GetRowCount()-1) {

            OldOff=off;

               r++;

               off=GetXPosOnLine(r,PrevX);

            if (bShift) {

               ExpandSelection(OldOff,off);

            } else {

               if (SelStart != SelEnd) {

                   off=max(SelStart, SelEnd);

                   ClearSelection();

                   SetCaret();

                   SendMessage(hWnd,WM_KEYDOWN,VK_DOWN,(LPARAM)0);

               }

            }

               SetCaret(FALSE);

          }

 

        if (!bShift) {

            ClearSelection();

        }

          return;

 

<Shift>Å°¿¡ ´ëÇÑ Ã³¸®´Â Á¿ìÀ̵¿°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. À̵¿ÀüÀÇ À§Ä¡¸¦ OldOff¿¡ ÀúÀåÇصΰí À̵¿ÇÑ À§Ä¡ off±îÁö ¼±ÅÃÀ» È®ÀåÇÏ¸é µÈ´Ù. <Shift>Å°¸¦ ´©¸¥ ä·Î ¾Æ·¡À§·Î À̵¿Çϸé ÁÙ´ÜÀ§·Î ¼±ÅÃÀÌ È®ÀåµÉ °ÍÀÌ´Ù. ±×·¯³ª <Shift>Å°¸¦ ´©¸£Áö ¾Ê¾ÒÀ» ¶§ ¼±Åÿµ¿ªÀ» Ǫ´Â ¹æ½ÄÀº »ó´çÈ÷ ´Ù¸£´Ù. Á¿ìÀ̵¿½Ã´Â ºí·ÏÀÇ ¿ÞÂÊÀ̳ª ¿À¸¥ÂÊÀ¸·Î ij·µÀ» ¿Å°ÜÁֱ⸸ ÇßÀ¸³ª »óÇÏÀ̵¿½Ã´Â ºí·ÏÀÇ Ã³À½°ú ³¡À¸·Î ij·µÀ» ¿Å±ä ÈÄ ´Ù½Ã ¾Æ·¡À§·Î ÇÑ ¹ø ´õ À̵¿ÇÑ´Ù. Áï ¼±ÅÃÀ» Ç®¸é¼­ »óÇÏÀ̵¿µµ °°ÀÌ ÇÏ´Â °ÍÀÌ´Ù.

Á¿ìÀ̵¿°ú´Â ´Þ¸® »óÇÏÀ̵¿½Ã´Â ¿Ö ÀÌ·¸°Ô ó¸®Çϵµ·Ï Çߴ°¡ Çϸé ÇÑ ÁÙ ¾È¿¡¼­¸¸ ¼±ÅÃÀÌ µÇ¾î ÀÖ´Â °æ¿ì ºí·ÏÀÇ Ã³À½À̳ª ³¡À¸·Î À̵¿ÇÏ°í °¡¸¸È÷ ÀÖÀ¸¸é »ç¿ëÀÚÀÇ »óÇÏÀ̵¿ ¸í·ÉÀ» ¹«½ÃÇÑ µíÇÑ ´À³¦ÀÌ µé±â ¶§¹®ÀÌ´Ù. Á¿ìÀ̵¿Àº ¿ø·¡ ¼öÆòÀ̵¿À̱⠶§¹®¿¡ ±»ÀÌ Ä³·µÀÌ ºí·Ï ¹ÛÀ¸·Î ¿òÁ÷ÀÌÁö ¾Ê¾Æµµ ÀÌ»óÇÏÁö ¾ÊÁö¸¸ »óÇÏÀ̵¿ÀÇ °æ¿ì´Â ¼±ÅÃÀ» Ç®°í ³­ ´ÙÀ½¿¡µµ »óÇÏÀ̵¿À» ÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù.

±×·¡¼­ <Shift>Å°°¡ ´­·¯ÁöÁö ¾Ê¾Ò°í ¼±Åÿµ¿ªÀÌ ÀÖÀ» ¶§ VK_UPÀ» ÇÑ ¹ø ´õ º¸³» À§·Î À̵¿Çϵµ·Ï ÇÏ¿´´Ù. VK_UPÀÌ VK_UPÀ» ½ÇÇàÇÏ´Â ²ÃÀε¥ ±× Àü¿¡ ¼¼ °¡Áö 󸮰¡ ÇÊ¿äÇÏ´Ù. ¿ì¼± off´Â ºí·ÏÀÇ Ã³À½À¸·Î À̵¿½ÃÄÑ ºí·Ï óÀ½¿¡¼­ À§·Î À̵¿Çϵµ·Ï ÇÑ´Ù. ClearSelection ÇÔ¼ö¸¦ ºÒ·¯ ÁØ ÀÌÀ¯´Â ¹«ÇÑ·çÇÁ¸¦ ¹æÁöÇϱâ À§Çؼ­Àε¥ °è¼Ó ¼±Åÿµ¿ªÀÌ ³²¾Æ ÀÖÀ¸¸é VK_UPÀÌ ¹«ÇÑ ¹ø È£ÃâµÇ±â ¶§¹®¿¡ ´ÙÀ½ ¹ø È£Ãâ¿¡¼­ ³¡À» ³»±â À§Çؼ­ÀÌ´Ù. SetCaret È£ÃâÀÌ ÇÊ¿äÇÑ ÀÌÀ¯´Â º¯°æµÈ off·ÎºÎÅÍ PrevX¸¦ °»½ÅÇϱâ À§Çؼ­ÀÌ´Ù. VK_UPÀº PrevX¸¦ ±âÁØÀ¸·Î ¼öÁ÷ ´ëÀÀ À§Ä¡¸¦ ãÀ¸¹Ç·Î PrevX°¡ Á¦´ë·Î ¼³Á¤µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.

<Ctrl>Å°¿Í »óÇÏÀ̵¿Å°´Â Á¦ÀÚ¸® ½ºÅ©·Ñ ±â´ÉÀ» °¡Áö´Âµ¥ ij·µÀº ±× ÀÚ¸®¿¡ µÎ°í ¾Æ·¡À§·Î ½ºÅ©·ÑÇÏ´Â °ÍÀÌ´Ù. ½ºÅ©·Ñ ±â´ÉÀº ÀÌ¹Ì ´Ù ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ½ºÅ©·Ñ ¸Þ½ÃÁö¸¦ º¸³»Áֱ⸸ ÇÏ¸é °øÂ¥·Î ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. <Ctrl>Å°¸¦ ´©¸¥ ä·Î À§·Î À̵¿Çϸé À§·Î ½ºÅ©·Ñ¸¸ µÇ¸ç ÇöÀç À§Ä¡´Â º¯ÇÏÁö ¾Ê´Â´Ù. ÀÌ Å° Á¶ÇÕÀº ÇöÀç ÆíÁý À§Ä¡¸¦ À¯ÁöÇÑ Ã¤·Î È­¸éÀÇ Á» ´õ À§ÂÊÀ» º¼ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

½ºÅ©·Ñ ±â´É°ú °ÅÀÇ µ¿ÀÏÇ쵂 ´Ü ij·µÀÌ È­¸éÀ» ¹þ¾î³ªÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. ij·µÀÌ È­¸éÀÇ Á¦ÀÏ ¾Æ·¡ÁÙ¿¡ ÀÖ´Â »óÅ¿¡¼­ À§·Î ½ºÅ©·ÑÇϸé ij·µÀº ¾Æ·¡·Î ³»·Á°¡ ¹ö¸± °ÍÀÌ´Ù. ±×·¡¼­ ½ºÅ©·ÑÇÑ ÈÄ¿¡ ij·µÀÌ È­¸é Á¦ÀÏ ¾Æ·¡ÁÙ¿¡ ÀÖ´ÂÁö º¸°í ±×·¸´Ù¸é returnÇÏÁö ¾Ê°í ¾Æ·¡·Î ³»·Á¿Í ÇÑ ÁÙ À§·Î À̵¿Çϵµ·Ï ÇÏ¿´´Ù.

¾Æ·¡·Î À̵¿ÇÒ ¶§µµ ¸¶Âù°¡Áö 󸮸¦ ÇÑ´Ù. ½ºÅ©·ÑÇÑ ÈÄ¿¡ ij·µÀÌ È­¸é»óÀÇ Ã¹ ÁÙº¸´Ù ÇÑ ÁÙ ´õ ÀÛÀº À§Ä¡¶ó¸é, Áï È­¸é À§ÀÇ ¾È º¸ÀÌ´Â ºÎºÐÀ¸·Î °¡ ¹ö·È´Ù¸é ¾Æ·¡·Î ÇÑ Ä­ ³»·Á ÁÖµµ·Ï ÇØ¾ß ÇÑ´Ù. ±× ¿ÜÀÇ °æ¿ì´Â Ä¿¼­À̵¿À» ÇÏÁö ¾Ê°í ½ºÅ©·Ñ¸¸ ÇÑ ÈÄ °ð¹Ù·Î returnÇÑ´Ù. »óÇÏÀ̵¿Àº <Ctrl>Å°¿Í <Shift>Å°¸¦ °°ÀÌ ´©¸£´Â °Í¿¡ ´ëÇؼ­´Â ±â´ÉÀ» ÀüÇô Á¤ÀÇÇÏÁö ¾Ê°í ÀÖ´Ù. ±×·¡¼­ ÀÌ Å°Á¶ÇÕÀº ¹«½ÃÇÏ¿´´Ù. ´ÙÀ½Àº <PgUp>, <PgDn>ÀÇ ÄÚµåÀÌ´Ù.

 

     case VK_PRIOR:

          GetRCFromOff(off,r,c);

          oldr=r;

          r-=crt.bottom/LineHeight;

          r=max(r,0);

          yPos=yPos-(oldr-r)*LineHeight;

          yPos=max(yPos,0);

          InvalidateRect(hWnd,NULL,TRUE);

          SetScrollPos(hWnd, SB_VERT, yPos, TRUE);

 

        OldOff=off;

          off=GetXPosOnLine(r,PrevX);

        if (bShift) {

            ExpandSelection(OldOff,off);

        } else {

            ClearSelection();

        }

          SetCaret(FALSE);

          return;

     case VK_NEXT:

          GetRCFromOff(off,r,c);

          oldr=r;

          r+=crt.bottom/LineHeight;

          r=min(r,GetRowCount()-1);

          yPos=yPos+(r-oldr)*LineHeight;

          yPos=max(0,min(yPos,yMax-(crt.bottom/LineHeight)*LineHeight));

          InvalidateRect(hWnd,NULL,TRUE);

          SetScrollPos(hWnd, SB_VERT, yPos, TRUE);

 

        OldOff=off;

          off=GetXPosOnLine(r,PrevX);

        if (bShift) {

            ExpandSelection(OldOff,off);

        } else {

            ClearSelection();

        }

          SetCaret(FALSE);

          return;

 

<Shift>Å°¿¡ ´ëÇÑ Ã³¸®°¡ Ãß°¡µÇ¾î <Shift>Å°¸¦ ´©¸¥ ä·Î À̵¿Çϸé ÆäÀÌÁö´ÜÀ§·Î ¼±ÅÃÀ» È®ÀåÇÑ´Ù. <Ctrl>Å°¿¡ ´ëÇؼ­´Â ó¸®ÇÏ°í ÀÖÁö ¾ÊÀ¸³ª ÀϺη¯ ¸·Áöµµ ¾Ê¾ÒÀ¸¹Ç·Î <Ctrl+PgUp>Àº <PgUp>°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ÇÊ¿äÇÏ´Ù¸é ÇöÀç º¸ÀÌ´Â È­¸é»óÀÇ Ã³À½À̳ª ÀÌÀü ¹®´ÜÀ¸·Î À̵¿ µîÀÇ ±â´ÉÀ» ºÎ¿©ÇÒ ¼öµµ ÀÖ´Ù.

 

ÀÌ»ó, ¿©±â±îÁö Å°º¸µå·Î ºí·ÏÀ» ¼±ÅÃÇÏ´Â ¹æ¹ý°ú ´ýÀ¸·Î <Ctrl>Å°¿¡ ´ëÇÑ Ã³¸®±îÁö °°ÀÌ ±¸ÇöÇغ¸¾Ò´Ù. ÀÌ ½Ç½À¿¡¼­ ExpandSelectionÀ̶ó´Â ÇÔ¼ö¸¦ ¸¸µé¾î ¾ÆÁÖ ¿ä±äÇÏ°Ô »ç¿ëÇߴµ¥ ÀÌ ÇÔ¼ö¸¦ ¸¸µéÁö ¾Ê¾Ò´Ù¸é °¢ Å°ÀÇ Ã³¸® ·çƾÀÌ ¹«Ã´ ±æ¾îÁ³À» °ÍÀÌ´Ù. ÀÌ·± ÇÔ¼ö´Â ¹Ì¸® ¸¸µé¾î ³õ°í »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¹Ý´ë·Î Äڵ带 ´Ù ÀÛ¼ºÇÑ ÈÄ °øÅëµÈ ºÎºÐÀ» »Ì¾Æ³»¼­ ¸¸µç´Ù.

°¢ Å° ó¸® ·çƾÀ» ¸¸µé¾î ³õ°í º¸´Ï °è¼Ó À¯»çÇÑ Äڵ尡 ¹Ýº¹µÇ±æ·¡ ÀÌ ÄÚµåµéÀ» Àß Á¤¸®Çؼ­ ÀçÈ°¿ëÀÌ ½±µµ·Ï ¸¸µç ÇÔ¼ö°¡ ¹Ù·Î ExpandSelection ÇÔ¼öÀÌ´Ù. óÀ½ºÎÅÍ ÀÌ·± ÇÔ¼öÀÇ Çʿ伺À» ÀÎÁöÇϱâ´Â À¢¸¸Å­ °æÇèÀÌ ¸¹¾Æµµ »ç½Ç ¹«Ã´ ¾î·Æ´Ù. Áï, °³¹ß°úÁ¤À̶õ ÇÊ¿äÇÑ ÇÔ¼ö¸¦ ´Ù ¸¸µé¾î ³õ°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÏ´Ü ÄÚµùÀ» ÇÏ´Ù°¡ ¹Ýº¹µÇ´Â ·çƾÀ» ÇÔ¼ö·Î ºÐ¸®Çϸ鼭 Á¡Á¡ ¿Ï¼ºµÇ¾î°¡´Â °ÍÀÌ´Ù.