´Ù.Å©±â º¯°æ

µµÇüÀÇ Å©±â¸¦ º¯°æÇÒ ½ÃÁ¡Àº ¸¶¿ì½º·Î Æ®·¡Ä¿¸¦ ´­·¯ µå·¡±×ÇÒ ¶§ÀÌ´Ù. OnLButtonDown¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.

 

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

{

   int TempSel;

   int nHit;

 

   if (NowTool==DT_SELECT) {

      nHit=TrackerHitTest(LOWORD(lParam),HIWORD(lParam));

      if (nHit != 0) {

          oldx=LOWORD(lParam);

          oldy=HIWORD(lParam);

          dObj=*arObj[NowSel];

          SizeCorner=nHit;

          DrawTemp(&dObj);

          DragMode=DM_SIZE;

      } else {

          TempSel=FindObject(LOWORD(lParam),HIWORD(lParam));

          ....

 

FindObject·Î ¼±Åà µµÇüÀ» ¹Ù²Ù´Â 󸮺¸´Ù Æ®·¡Ä¿ À§¿¡ ÀÖ´ÂÁö Á¡°ËÇÏ´Â Äڵ尡 ´õ ¾ÕÂÊ¿¡ ÀÖ¾î¾ß ÇÑ´Ù. Æ®·¡Ä¿´Â µµÇüÀÇ ¾ÈÂÊ°ú ¹Ù±ùÂÊ¿¡ °ÉÃÄ Àִµ¥ ¼±Åà 󸮸¦ ¸ÕÀú ÇÏ°Ô µÇ¸é µµÇü ¹Ù±ùÀÇ Æ®·¡Ä¿¸¦ ´­·¶À» ¶§ ¼±ÅÃÀÌ ÇØÁ¦µÇ¾î ¹ö·Á Å©±â Á¶Á¤ÀÌ ¾î·Á¿öÁø´Ù. ¿¹¸¦ µé¾î »ç°¢ÇüÀÇ ¿À¸¥ÂÊ À§¿¡ ÀÖ´Â 3¹ø Æ®·¡Ä¿¸¦ º¸ÀÚ.

Æ®·¡Ä¿ÀÇ ¿ÞÂÊ ¾Æ·¡ ºÎºÐ 1/4 ¿µ¿ªÀº µµÇüÀÇ ³»ºÎÀÌÁö¸¸ ³ª¸ÓÁö 3/4¿µ¿ªÀº µµÇüÀÇ ¹Ù±ù¿¡ ÀÖ´Ù. ÀÌ ¿µ¿ªµµ Å©±â Á¶Á¤¿¡ »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß Çϴµ¥ µµÇü ¼±ÅÃÀ» º¯°æÇÏ´Â FindObject ÇÔ¼ö´Â ÀÌ ¿µ¿ªÀÌ µµÇüÀÇ ÀϺΰ¡ ¾Æ´Ï¹Ç·Î ¼±ÅÃÀ» ÇØÁ¦ÇØ ¹ö¸± °ÍÀÌ°í µû¶ó¼­ ¼±ÅÃÀÌ ¾ø´Â »óÅ¿¡¼­´Â µµÇüÀÇ Å©±â¸¦ º¯°æÇÒ ¼ö ¾ø°Ô µÈ´Ù. TrackerHitTest´Â ¼±ÅÃÀÌ ¾ø´Â »óÅÂÀÏ ¶§ ¹«Á¶°Ç 0À» ¸®ÅÏÇϵµ·Ï µÇ¾î Àִµ¥ °¡±ÞÀûÀÌ¸é ¼±ÅÃÀ» À¯ÁöÇÑ Ã¤·Î Æ®·¡Ä¿ Á¡°ËÀ» ¸ÕÀú Çϵµ·Ï ÇØ¾ß ÇÑ´Ù.

À̵¿Àº ¼±Åà º¯°æ°ú µ¿½Ã¿¡ ½ÃÀÛµÉ ¼ö ÀÖÁö¸¸ Å©±â º¯°æÀº ±×·¸Áö ¸øÇؼ­ ¹Ýµå½Ã ´ë»ó µµÇüÀ» ¼±ÅÃÇØ ³õ°í Å©±â¸¦ º¯°æÇØ¾ß ÇÑ´Ù. ÀÏ´Ü Æ®·¡Ä¿°¡ º¸¿©¾ß Å©±â º¯°æÀÌ °¡´ÉÇϹǷΠ¼±ÅÃÀÌ ¾ø´Â »óÅ¿¡¼­´Â Å©±â º¯°æÀ» ÇÒ ¼ö ¾øÀ¸¸ç »ç¿ëÀڵ鵵 ÀÌ·± ±â´ë¸¦ ÇÏÁö ¾Ê´Â´Ù.

Æ®·¡Ä¿ À§¿¡¼­ ¸¶¿ì½º ¹öÆ°À» ´­·¶À¸¸é dObj¿¡ ÇöÀç µµÇüÀÇ »çº»À» ÀÛ¼ºÇÏ°í oldx, oldy´Â ÃÖÃÊ Å¬¸¯ÇÑ ÁöÁ¡À», SizeCorner¿¡´Â µå·¡±×¸¦ ½ÃÀÛÇÑ Æ®·¡Ä¿ ¹øÈ£¸¦ ÀúÀåÇÑ´Ù. ±×¸®°í DragMode´Â DM_SIZE·Î º¯°æÇÏ¿© OnMouseMove¿¡¼­ Å©±â º¯°æ 󸮸¦ Çϵµ·Ï ÇÑ´Ù.

 

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

{

   ....

   if (DragMode==DM_SIZE) {

      DrawTemp(&dObj);

      switch (SizeCorner) {

      case 1:

          dObj.rt.left+=ex-oldx;

          dObj.rt.top+=ey-oldy;

          break;

      case 2:

          dObj.rt.top+=ey-oldy;

          break;

      case 3:

          dObj.rt.right+=ex-oldx;

          dObj.rt.top+=ey-oldy;

          break;

      case 4:

          dObj.rt.left+=ex-oldx;

          break;

      case 5:

          dObj.rt.right+=ex-oldx;

          break;

      case 6:

          dObj.rt.left+=ex-oldx;

          dObj.rt.bottom+=ey-oldy;

          break;

      case 7:

          dObj.rt.bottom+=ey-oldy;

          break;

      case 8:

          dObj.rt.right+=ex-oldx;

          dObj.rt.bottom+=ey-oldy;

          break;

      }

      oldx=ex;

      oldy=ey;

      DrawTemp(&dObj);

   }

   return 0;

}

 

À̵¿À» ½ÃÀÛÇÑ ÁÂÇ¥ÀÎ oldx,oldy¿Í ÇöÀç ¸¶¿ì½º ÁÂÇ¥ÀÎ ex,eyÀÇ Â÷À̷κÎÅÍ ¸¶¿ì½ºÀÇ À̵¿ °Å¸®¸¦ ±¸ÇÏ°í  ÀÌ °Å¸®¸¦ Àӽà °´Ã¼ÀÇ Å©±â¿¡ Àû¿ëÇÑ´Ù. ÃÖÃÊ µå·¡±×¸¦ ½ÃÀÛÇÑ Æ®·¡Ä¿ ¹øÈ£¿¡ µû¶ó Å©±â Á¶Á¤ÀÇ ´ë»óÀÌ ´Þ¶óÁö´Âµ¥ ¿¹¸¦ µé¾î 3¹ø Æ®·¡Ä¿ÀÇ °æ¿ì right, topÀ» Á¶Á¤ÇÏ°í 5¹ø Æ®·¡Ä¿ÀÇ °æ¿ì right¸¸ Á¶Á¤ÇÏ¸é µÈ´Ù. switch ¹®ÀÌ ³Ê¹« ±æ¾î º¸Àδٸé if ¹®À¸·Î Á» ´õ ª°Ô ¹Ù²Ü ¼öµµ ÀÖ´Ù.

 

   if (DragMode==DM_SIZE) {

      DrawTemp(&dObj);

      if (SizeCorner==1 || SizeCorner==4 || SizeCorner==6) dObj.rt.left+=ex-oldx;

      if (SizeCorner==1 || SizeCorner==2 || SizeCorner==3) dObj.rt.top+=ey-oldy;

      if (SizeCorner==3 || SizeCorner==5 || SizeCorner==8) dObj.rt.right+=ex-oldx;

      if (SizeCorner==6 || SizeCorner==7 || SizeCorner==8) dObj.rt.bottom+=ey-oldy;

      oldx=ex;

      oldy=ey;

      DrawTemp(&dObj);

   }

 

switch¹®Àº SizeCorner¿¡ µû¶ó Á¶Á¤ ´ë»óÀ» °³º° ¼±ÅÃÇÏÁö¸¸ if¹®Àº Á¶Á¤ ´ë»ó¿¡ ÇØ´çÇÏ´Â SizeCornerÀÇ °ªÀ» ÀÏ°ý Á¡°ËÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. if¹®ÀÌ ´õ ª±â´Â ÇÏÁö¸¸ °¡µ¶¼ºÀº switch¹®ÀÌ Á¶±Ý ´õ ÁÁÀº ÆíÀÌ´Ù. ÀÌ µÎ ¹®ÀåÀÇ È¿À²À» ºñ±³ÇÑ´Ù´Â °ÍÀº µµÅ丮 Å°Àç±â¶ó º° Àǹ̰¡ ¾øÁö¸¸ ±æÀÌ´Â if¹®ÀÌ Âª°í Àб⿡´Â switch¹®ÀÌ ´õ ÁÁ´Ù. ¿äÁò Ãß¼¼´Â °¡µ¶¼ºÀ» °¡Àå Áß¿ä½ÃÇϱ⠶§¹®¿¡ Àбâ ÁÁÀº ¼Ò½º¸¦ äÅÃÇß´Ù. ÀÌ °úÁ¤À» ¸¶¿ì½º À̵¿½Ã¸¶´Ù ¹Ýº¹ÇÏ´Ù°¡ ¹öÆ°À» ³õÀ» ¶§ ¼±Åà µµÇüÀÇ Å©±â¸¦ ÃÖÁ¾ÀûÀ¸·Î °áÁ¤ÇÑ´Ù.

 

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

{

   ....

   if (DragMode==DM_MOVE || DragMode==DM_SIZE) {

      arObj[NowSel]->rt=dObj.rt;

      InvalidateRect(hWnd,NULL,TRUE);

   }

   DragMode=DM_NONE;

   ReleaseCapture();

   return 0;

}

 

Å©±â º¯°æ Á¾·á 󸮴 À̵¿ Á¾·á ó¸®¿Í µ¿ÀÏÇϹǷΠÁ¶°Ç¹®¸¸ Çϳª ´õ Ãß°¡ÇÏ¸é µÈ´Ù. Àӽà °´Ã¼ÀÇ rt¸¦ µµÇüÀÇ rt¿¡ ´ëÀÔÇÏ°í ¹«È¿È­½ÃÅ°¸é º¯°æµÈ À§Ä¡¿¡ µµÇüÀ» ´Ù½Ã ±×¸®´Â °ÍÀº OnPaint°¡ ¾Ë¾Æ¼­ ÇÑ´Ù.