¸¶.Å°º¸µå Áö¿ø

´ÙÀ½Àº Å°º¸µå·Îµµ µµÇüÀÇ Å©±â º¯°æ ¹× À̵¿À» ÇÒ ¼ö ÀÖµµ·Ï ÇØ º¸ÀÚ. µå·ÎÀ× ÇÁ·Î±×·¥ÀÇ ÀÛ¾÷Àº ´ëºÎºÐ ¸¶¿ì½º·Î ÇÒ ¼ö ÀÖÁö¸¸ ¼¶¼¼ÇÑ À̵¿ 󸮳ª Å©±â º¯°æ¿¡´Â Å°º¸µå°¡ ´õ ÀûÇÕÇÑ °æ¿ìµµ ÀÖ´Ù. Ä¿¼­ À̵¿Å°¸¸ ´©¸£¸é À̵¿ 󸮸¦ ÇÏ°í ShiftÅ°¿Í ÇÔ²² ´©¸£¸é Å©±â¸¦ º¯°æÇÑ´Ù. CtrlÅ°´Â 1Çȼ¿ ´ÜÀ§·Î ¹Ì¼¼ÇÏ°Ô À̵¿ ¹× Å©±â º¯°æÀ» ÇÑ´Ù. OnKeyDown¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÏÀÚ.

 

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

{

   BOOL bShift, bControl;

   int dx,dy;

   RECT drt,crt,irt;

   BOOL bAction=TRUE;

 

   if (NowSel == -1) {

      return 0;

   }

  

   bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);

   bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);

   if (bControl) {

      dx=1;

      dy=1;

   } else {

      dx=8;

      dy=8;

   }

   drt=arObj[NowSel]->rt;

 

   if (bShift == FALSE) {

      switch(wParam) {

      case VK_LEFT:

          OffsetRect(&drt,-dx,0);

          break;

      case VK_RIGHT:

          OffsetRect(&drt,dx,0);

          break;

      case VK_UP:

          OffsetRect(&drt,0,-dy);

          break;

      case VK_DOWN:

          OffsetRect(&drt,0,dy);

          break;

      default:

          bAction=FALSE;

          break;

      }

   } else {

      switch(wParam) {

      case VK_LEFT:

          if (drt.right > drt.left + 10) {

             drt.right -= dx;

          }

          break;

      case VK_RIGHT:

          drt.right += dx;

          break;

      case VK_UP:

          if (drt.bottom > drt.top + 10) {

             drt.bottom -=dy;

          }

          break;

      case VK_DOWN:

          drt.bottom += dy;

          break;

      default:

          bAction=FALSE;

          break;

      }

   }

 

   if (bAction) {

      GetClientRect(hWnd,&crt);

      InflateRect(&crt,-10,-10);

      IntersectRect(&irt,&crt,&drt);

      if (!IsRectEmpty(&irt)) {

          arObj[NowSel]->rt=drt;

          InvalidateRect(hWnd,NULL,TRUE);

      }

   }

   return 0;

}

 

Å°º¸µå·Î À̵¿ ¹× Å©±â º¯°æÀ» ÇÏ´Â ´ë»óÀº ¹°·Ð ¼±ÅÃµÈ µµÇüÀÌ¸ç ¼±ÅÃÀÌ ¾ø´Ù¸é À̵¿À̳ª Å©±â º¯°æµµ ÇÒ ¼ö ¾ø´Ù. ´Ü, Å°º¸µå´Â ¸¶¿ì½º¿Í ´Þ¸® ¼±Åà ÅøÀÌ ¾Æ´Ò ¶§µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. NowToolÀº ¸¶¿ì½º¸¦ ´©¸¦ ¶§ÀÇ µ¿ÀÛ¿¡ ¿µÇâÀ» ÁÖÁö¸¸ Å°º¸µå¿¡´Â ¿µÇâÀ» ÁÖÁö ¾Ê´Âµ¥ ¿Ö³ÄÇÏ¸é ¾îÂ÷ÇÇ Å°º¸µå·Î´Â »õ·Î¿î µµÇüÀ» ¸¸µå´Â ¹æ¹ýÀÌ Á¦°øµÇÁö ¾Ê±â ¶§¹®ÀÌ´Ù. Å°º¸µå ÀÔ·ÂÀº ¹«Á¶°Ç ¼±Åà µµÇüÀÇ À̵¿ ¶Ç´Â Å©±â º¯°æÀ¸·Î Çؼ®ÇÒ ¼ö ÀÖ´Ù.

½¬ÇÁƮŰ¿Í ÄÁÆ®·ÑÅ°ÀÇ ÇöÀç »óÅ´ GetKeyState ÇÔ¼ö·Î ½±°Ô ±¸ÇÒ ¼ö ÀÖÀ¸¸ç bControl°ª¿¡ µû¶ó À̵¿ ¹× Å©±â º¯°æÀÇ ´ÜÀ§ÀÎ dx, dy°¡ ´Þ¶óÁø´Ù. bShift°¡ FALSEÀ̸é À̵¿ 󸮸¦ Çϴµ¥ µµÇüÀÇ ¿µ¿ªÀ» dx, dy¸¸Å­ À̵¿½ÃÅ°¸é µÈ´Ù. bShift°¡ TRUEÀ̸é Å©±â º¯°æ 󸮸¦ Çϴµ¥ µµÇüÀÇ Á»ó´ÜÀº °íÁ¤ÇØ ³õ°í ¿ìÇÏ´ÜÀÇ ÁÂÇ¥¸¸ Á¶Á¤Ç쵂 Á¤±ÔÈ­ ¿øÄ¢À» Ç×»ó ¸¸Á·ÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù.

Å°º¸µå·Î µµÇüÀ» ¿òÁ÷ÀÏ ¶§µµ ĵ¹ö½º ¹Ù±ùÀ¸·Î µµÇüÀÌ ³ª°¥ ¼ö ¾øµµ·Ï ¿¹¿Ü 󸮸¦ ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. Å°¸¦ ÇÑ ¹ø ´©¸¦ ¶§¸¶´Ù µµÇüÀÇ À§Ä¡¿Í Å©±â°¡ ¹Ù²î¸ç ¸Å¹ø Àüü È­¸éÀ» ´Ù½Ã ±×¸®µµ·Ï Çß´Ù. ĵ¹ö½º°¡ Å° ÀÔ·ÂÀ» ¹ÞÀ¸·Á¸é ¸ÞÀÎ À©µµ¿ì°¡ Æ÷Ä¿½º¸¦ ĵ¹ö½º¿¡°Ô ¾çº¸ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.

 

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

{

   SetFocus(hCanvas);

   return 0;

}

 

WM_KEYDOWNÀº Æ÷Ä¿½º¸¦ °¡Áø À©µµ¿ì¿¡°Ô¸¸ Àü´ÞµÇ±â ¶§¹®¿¡ ºÎ¸ð°¡ ÀڽĿ¡°Ô Æ÷Ä¿½º¸¦ ¾çº¸ÇÏÁö ¾ÊÀ¸¸é ĵ¹ö½º°¡ Å° ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ¾ø´Ù. ApiDrawÀÇ ¸ÞÀÎ À©µµ¿ì´Â ¾îÂ÷ÇÇ ²®µ¥±â¿¡ ºÒ°úÇϱ⠶§¹®¿¡ Æ÷Ä¿½º¸¦ °¡Áú ÇÊ¿ä°¡ ÀüÇô ¾ø´Ù. ¿©±â±îÁö°¡ ApiDraw05ÀÌ´Ù.