¶ó.¹ö±× ¼öÁ¤

¸¶Áö¸·À¸·Î ÀÌ ÇÁ·Î±×·¥ÀÌ °¡Áø ¾à°£ÀÇ ¹ö±×¸¦ ¼öÁ¤ÇØ º¸ÀÚ. ApiDraw´Â µµÇüÀ» À̵¿, Å©±â º¯°æÇÒ ¶§ µµÇüÀÌ È­¸é ¾È¿¡ Àß ÀÖ´ÂÁö, À߸øµÈ »óÅ°¡ ¾Æ´ÑÁö¸¦ Á¡°ËÇÏ¿© µµÇüÀÌ °©Àڱ⠻ç¶óÁöÁö ¾Êµµ·Ï ÇÑ´Ù. ÀÌ·± ¿¡·¯ 󸮿¡ ÀÇÇØ ¶Ç ´Ù¸¥ ¿¡·¯°¡ ¹ß»ýÇÒ ¼ö Àִµ¥ Á÷¼±ÀÇ °æ¿ì ³¡ Á¡À» µå·¡±×ÇÏ¿© ¼öÆò, ¼öÁ÷¼±À¸·Î ¹Ù²Ù¾î ¹ö¸®¸é Æø, ³ôÀÌ°¡ 0ÀÌ µÇ¾î ¹«È¿ÇÑ µµÇüÀ¸·Î À߸ø Á¡°ËµÈ´Ù. ±×·¡¼­ Á÷¼±À» ±×¾î ¼öÆò, ¼öÁ÷¼±À» ¸¸µé ¼ö ÀÖÁö¸¸ ÀÌ¹Ì Á¸ÀçÇÏ´Â ¼±À» ¼öÆò, ¼öÁ÷¼±À¸·Î´Â ¹Ù²ÙÁö ¸øÇÑ´Ù.

¶ÇÇÑ Å¸¿øÀÇ °æ¿ì ¼±ÅÃÀÇ Á¤È®µµ¸¦ ³ôÀ̱â À§ÇØ ¸®Àü Å×½ºÆ®¸¦ Ç߱⠶§¹®¿¡ Ÿ¿øÀÌ À½¼ö ¿µ¿ªÀ¸·Î À̵¿ÇÏ¿© Ÿ¿ø ¿µ¿ªÀÇ ¹Ù±ùÂÊ ÀϺθ¸ º¸ÀÏ ¶§ ÀÌ Å¸¿øÀ» ´Ù½Ã ¼±ÅÃÇÒ ¹æ¹ýÀÌ ¾ø´Ù. PtInRect·Î ¼±Åà Á¡°ËÀ» ÇÒ ¶§´Â ¾Èº¸ÀÌ´Â ÀÏºÎ¶óµµ È­¸é¾È¿¡ °ÉÄ¡±â¸¸ ÇÏ¸é ´Ù½Ã ²¨³¾ ¼ö ÀÖ¾úÁö¸¸ ¸®Àü Å×½ºÆ®¸¦ ÇÔÀ¸·Î½á Ÿ¿ø ³»ºÎ°¡ ¾Æ´Ñ Á¡Àº Ÿ¿øÀ¸·Î ÀÎÁ¤µÇÁö ¾Ê´Â ¹ö±×°¡ »ý±ä °ÍÀÌ´Ù.

ÀÌ µÎ ¹ö±×°¡ ¹ß»ýÇÑ ÀÌÀ¯´Â µµÇüÀÇ À̵¿°ú Å©±â º¯°æ½ÃÀÇ À¯È¿¼º Á¡°Ë ·çƾÀÌ Á¤±³ÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù. ±×·¡µµ ÀÌÀü ¹öÀü¿¡¼­´Â ¹ö±×°¡ Àß ¸ñ°ÝµÇÁö ¾Ê¾ÒÀ¸³ª ±×¸®µå ±â´É¿¡ ÀÇÇØ ¼öÆò, ¼öÁ÷¼±À» ¸¸µé±â ½¬¿öÁ³°í ¸®Àü Å×½ºÆ®·Î ÀÎÇØ µµÇü ¼±ÅÃÀÌ Á¤È®ÇØÁ³±â ¶§¹®¿¡ ÀÌÁ¦´Â ÀÌ ¹ö±×°¡ ½±°Ô ÀçÇöµÉ ¼ö ÀÖ´Ù. °´Ã¼ÀÇ À¯È¿¼ºÀ» Á¡°ËÇÏ´Â ¹æ¹ýÀÌ °´Ã¼ÀÇ Å¸ÀÔ¿¡ µû¶ó Á» ´õ Á¤±³ÇØÁú ÇÊ¿ä°¡ ÀÖ´Ù. °´Ã¼ÀÇ À¯È¿¼ºÀ» Á¡°ËÇÏ´Â ´ÙÀ½ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.

 

BOOL IsValidObject(HWND hCanvas,int Type, RECT *ort)

{

   RECT crt,irt;

   HRGN hRgn;

   BOOL bIn;

 

   GetClientRect(hCanvas,&crt);

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

   switch (Type) {

   case DT_LINE:

      if (ort->left == ort->right && ort->top == ort->bottom)

          return FALSE;

      return (PtInRect(&crt,*((POINT *)ort)) || PtInRect(&crt,*((POINT *)&ort->right)));

   case DT_ELLIPSE:

      if (IsRectEmpty(ort))

          return FALSE;

      hRgn=CreateEllipticRgn(ort->left, ort->top, ort->right,ort->bottom);

      bIn=RectInRegion(hRgn,&crt);

      DeleteObject(hRgn);

      return bIn;

   default:

      IntersectRect(&irt,&crt,ort);

      return (!IsRectEmpty(&irt));

   }

}

 

ÀÛ¾÷ ¿µ¿ª Å©±â¿¡¼­ 10¸¸Å­ ¿©À¯ºÐÀ» ÁØ ¿µ¿ªÀ» »ý¼ºÇß´Ù. Á÷¼±ÀÎ °æ¿ì´Â µÎ Á¡ÀÌ ¸ðµÎ °°À» ¶§ ¹«È¿ÇÑ µµÇüÀÌ¸ç µÎ Á¡ Áß Çϳª¶óµµ ÀÛ¾÷ ¿µ¿ª ³»¿¡ ÀÖÀ¸¸é À¯È¿ÇÑ µµÇüÀ¸·Î ÀÎÁ¤Çß´Ù. µû¶ó¼­ ¼öÆò, ¼öÁ÷¼±µµ À¯È¿ÇÑ »óÅ°¡ µÇ¸ç µå·¡±×Çؼ­ ¼öÆò, ¼öÁ÷¼±À» ¸¸µé ¼ö ÀÖ´Ù.

Ÿ¿øÀº ÀÏ´Ü ¿µ¿ªÀÌ ºñ¾î ÀÖÁö ¾Ê¾Æ¾ß Çϴµ¥ Æø, ³ôÀÌ µÑ Áß ¾î´À °Íµµ 0ÀÌ ¾Æ´Ï¾î¾ß ´«¿¡ º¸ÀÌ´Â °´Ã¼ÀÌ´Ù. ÀÌ Á¶°ÇÀ» ¸¸Á·ÇÒ °æ¿ì Ÿ¿ø ¸®ÀüÀ» ¸¸µé°í ÀÌ ¸®ÀüÀÌ ÀÛ¾÷ ¿µ¿ªÀÇ ÀϺο¡¶óµµ °ÉÃÄ ÀÖ´ÂÁö Á¡°ËÇß´Ù. ±×¿ÜÀÇ »ç°¢Çü °´Ã¼µéÀº ÀÛ¾÷ ¿µ¿ª°ú °´Ã¼ ¿µ¿ªÀÇ ÀÏºÎ¶óµµ °ãÃÄ ÀÖÀ¸¸é µÈ´Ù. ort°¡ ºñ¾î ÀÖ´Ù¸é ±³ÁýÇÕ ¿µ¿ªÀÌ ÀÖÀ» ¼ö ¾øÀ¸¹Ç·Î ort¿¡ ´ëÇØ IsRectEmpty¸¦ Á¡°ËÇÒ ÇÊ¿ä´Â ¾ø´Ù. À¯È¿¼ºÀ» Á¡°ËÇÒ ÇÊ¿ä°¡ ÀÖ´Â °÷¿¡¼­ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ´ÙÀ½ µÎ ±ºµ¥ÀÌ´Ù.

 

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

{

   ....

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

      SwapResult=NormalizeRect(&dObj.rt);

      if (IsValidObject(hWnd,arObj[NowSel]->Type,&dObj.rt)) {

 

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

{

   ....

   if (bAction) {

      if (IsValidObject(hWnd,arObj[NowSel]->Type,&drt)) {

          bModified=TRUE;

          arObj[NowSel]->rt=drt;

          InvalidateRect(hWnd,NULL,TRUE);

      }

   }

 

À¯È¿¼ºÀ» Á¡°ËÇÏ´Â º°µµÀÇ ÇÔ¼ö°¡ ¸¸µé¾îÁ³À¸¹Ç·Î ÀÌ ÇÔ¼ö¿¡¼­ º°µµÀÇ Á¡°ËÀ» ÇÒ ÇÊ¿ä´Â ¾ø¾îÁ³À¸¸ç µÎ ÇÔ¼öÀÇ Áö¿ª º¯¼ö crt, irtµµ ÀÌÁ¦ ºÒÇÊ¿äÇÏ´Ù. ¸¶Áö¸·À¸·Î ¸±¸®Áî ÈÄ¿¡ ¹ß°ßµÈ ¹ö±× Çϳª¸¦ ¼öÁ¤Çϵµ·Ï ÇÏÀÚ. ¸¶¿ì½º·Î À̵¿À̳ª Å©±â º¯°æÀ» ÇÏ´Â Áß¿¡ ¿À¸¥ÂÊ ¸¶¿ì½º ¹öÆ°À» ´­·¯ Æ˾÷ ¸Þ´º¸¦ ¿­°Å³ª Å°º¸µå·Î À̵¿Çصµ ÀÌ Äڵ尡 µ¿ÀÛÇϴµ¥ µå·¡±× Áß¿¡´Â Æ˾÷ ¸Þ´º¸¦ ¿­°Å³ª Å°º¸µå Á¶ÀÛÀ» ¸øÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ Äڵ带 Ãß°¡Çϵµ·Ï ÇÏÀÚ.

 

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

{

   BOOL bShift, bControl;

   int dx,dy;

   RECT drt;

   BOOL bAction=TRUE;

 

   if (DragMode != DM_NONE) {

      return 0;

   }

   ....

 

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

{

   HMENU hMenu, hPopup;

   int TempSel;

   POINT pt;

 

   if (DragMode != DM_NONE) {

      return 0;

   }

   ....

 

µå·¡±× ÁßÀÏ ¶§´Â Å°º¸µå ÀÔ·ÂÀ̳ª Æ˾÷ ¸Þ´º Ãâ·ÂÀ» °ÅºÎÇϵµ·Ï Çß´Ù. À̸¦ ¸·Áö ¾ÊÀ¸¸é À̵¿Áß¿¡ ¼±ÅÃÀÌ ¹Ù²î¾î ¹ö¸®¹Ç·Î ÇÁ·Î±×·¥ÀÌ ´Ù¿îµÉ ¼öµµ ÀÖ´Ù. ÀÌ·± ¹ö±×´Â ¹Ì¸® ¿¹ÃøÇϱâ´Â ¾î·ÆÁö¸¸ ÀÏ´Ü Á¸Àç »ç½Ç¸¸ ¾Ë¸é ¼öÁ¤Çϱâ´Â ¾ÆÁÖ ½±´Ù. ÀÌ¿Ü¿¡ ¾ÆÁ÷ ãÁö ¸øÇÑ ¹ö±×°¡ 28°³ ´õ Àִµ¥ ÀÌ°Ç ´ÙÀ½¿¡ ¹ß°ßµÇ´Â´ë·Î ¼öÁ¤Çϱâ·Î ÇÑ´Ù.