4 ´Ü°è: ±×¸®±â ÄÚµå º¯°æ

´Ù°¢Çü Æ÷ÀÎÆ®¸¦ °è»ê, ±×·¡¼­ Ãß°¡ ÁË ¹× cos ÇÔ¼ö¸¦ »ç¿ë ÇÏ´Â ±×¸®±â Äڵ忡¼­ math.h Polyctl.hÀÇ »ó´Ü¿¡ Æ÷ÇÔ:

# include lt;math.h >
# include "resource.h" / ±âº» / ±âÈ£

Âü°í ¸±¸®½º ºôµå¸¸nbsp;??ATL COM ¸¶¹ý»ç ±âº» ÇÁ·ÎÁ§Æ®¸¦ »ý¼º ÇÏ´Â °æ¿ì ¸ÅÅ©·Î _ATL_MIN_CRTÁ¤ÀÇ ÇÕ´Ï´Ù. ÀÌ ¸ÅÅ©·Î Á¤ÀÇ µÇ¹Ç·Î ÇÊ¿ä ÇÏÁö ¾ÊÀ¸¸é ±ÍÇÏÀÇ Äڵ忡´Â C ·±Å¸ÀÓ ¶óÀ̺귯¸®¸¦°¡Áö°í ÇÏÁö ¾Ê½À´Ï´Ù. Polygon ÄÁÆ®·Ñ ºÎµ¿ ¼Ò¼öÁ¡ ÇÔ¼ö¸¦ ÃʱâÈ­ ÇÏ´Â C ·±Å¸ÀÓ ¶óÀ̺귯¸® ½ÃÀÛ Äڵ带 ÇÊ¿ä·Î ÇÑ´Ù. µû¶ó¼­, ¸±¸®½º ¹öÀüÀ» ±¸Ãà ÇϰíÀÚ ÇÏ´Â °æ¿ì _ATL_MIN_CRT ¸ÅÅ©·Î Á¦°Å ÇØ¾ß ÇÕ´Ï´Ù. ¸ÅÅ©·Î Á¦°Å ÇÏ·Á¸é ÇÁ·ÎÁ§Æ® ¸Þ´º¿¡¼­ ¼³Á¤ À» Ŭ¸¯ ÇÕ´Ï´Ù. ¿¡ ¿¡ ´ë ÇÑ ¼³Á¤: µå·Ó ´Ù¿î ¸ñ·Ï, ´ÙÁß ±¸¼ºÀ» ¼±Åà ÇÕ´Ï´Ù. ³ªÅ¸³ª´Â ¼öÁ¤ ÇÁ·ÎÁ§Æ® configuration(&s) ¼±Åà ´ëÈ­ »óÀÚ¿¡¼­ ¸ðµç 4 ¸±¸®½º ¹öÀü¿¡ ´ë ÇÑ È®ÀζõÀ» Ŭ¸¯ ÇÑ ´ÙÀ½ È®ÀÎÀ» Ŭ¸¯ ÇÕ´Ï´Ù. C/c + + ÅÇ¿¡¼­ ÀÏ¹Ý ¹üÁÖ¸¦ ¼±ÅÃÇÑ ´ÙÀ½ Àü󸮱â Á¤ÀÇ ÆíÁý »óÀÚ¿¡¼­ _ATL_MIN_CRT ¸¦ Á¦°ÅÇÕ´Ï´Ù¡£

POINT Çü½ÄÀÇ ¹è¿­À» Polyctl.hÀÇ Å¬·¡½º Á¤ÀÇÀÇ ³¡¿¡ Ãß°¡ ÇÏ ¿© Æ÷ÀÎÆ®¸¦ ÀúÀå ÇÏ µÇ ¸é ´Ù°¢Çü Æ÷ÀÎÆ®¸¦ °è»ê ÇÏ´Â:

   OLE_COLOR m_clrFillColor;
   ªÀº m_nSides;
   Æ÷ÀÎÆ® m_arrPoint [100]

ÀÌÁ¦ º¯°æ ÇÕ´Ï´Ù OnDraw ¾Æ·¡¿¡ ¸Â°Ô Polyctl.hÀÇ ±â´É. Âü°í »ç°¢Çü ¹× DrawText ÇÔ¼ö¿¡ ´ë ÇÑ È£ÃâÀ» Á¦°Å ÇÕ´Ï´Ù. ¶ÇÇÑ ¸í½ÃÀûÀ¸·Î ´ç½Å°ú °ËÁ¤ Ææ ¹× Èò»ö ºê·¯½Ã¸¦ ¼±Åà ÇÕ´Ï´Ù. ÄÁÆ®·ÑÀÌ ¾ø´Â ½ÇÇà ÇÏ´Â °æ¿ìÀÌ ÀÛ¾÷À» ¼öÇà ÇØ¾ß ÇÕ´Ï´Ù. ´ç½ÅÀº ±×¸®±â ÀÖÀ» °Å ¾ß ÇÏ´Â ÀåÄ¡ ÄÁÅØ½ºÆ®¿¡ ´ë ÇÑ °¡Á¤À» ¸¸µé ¼ö ¾ø½À´Ï´Ù ÀÚ½ÅÀÇ Ã¢ ¾ø´Ù¸é¡£

¿Ï·á OnDraw ÀÌ Ã³·³ º¸ÀÌ´Â:

HRESULT CPolyCtl::OnDraw(ATL_DRAWINFOamp; di)
{
   RECT & rc = *(RECT*)di.prcBounds;
   HDC hdc = di.hdcDraw;

COLORREF colFore;
   HBRUSH hOldBrush, hBrush;
   HPEN hOldPen, hPen;

/ / COLORREF Çü½ÄÀ¸·Î m_colFore ¹ø¿ª
   OleTranslateColor (m_clrFillColor, NULL, & colFore);

/ / »ý¼º ÇÏ °í µ¿±×¶ó¹Ì ±×¸± »ö»ó ¼±ÅÃ
   hPen (HPEN)GetStockObject(BLACK_PEN); =
   hOldPen (HPEN) SelectObject (hdc, hPen); =
   hBrush (HBRUSH)GetStockObject(WHITE_BRUSH); =
   hOldBrush = (HBRUSH) SelectObject (hdc, hBrush);

Ÿ¿ø (hdc, rc.left, rc.top, rc.right, rc.bottom);

/ / ¸¸µé°í ´Ù°¢ÇüÀ» ÀÛ¼º ÇÏ´Â µ¥ »ç¿ë ÇÏ´Â ºê·¯½¬ ¼±ÅÃ
   hBrush = CreateSolidBrush(colFore);
   SelectObject (hdc, hBrush);

CalcPoints(rc);
   ´Ù°¢Çü (hdc, & m_arrPoint [0], m_nSides);

/ / ´Ù½Ã ¿¾³¯ Ææ ¹× ºê·¯½Ã¸¦ ¼±Åà ÇÏ °í ¿ì¸®°¡ ¸¸µç ºê·¯½¬ »èÁ¦
   SelectObject (hdc, hOldPen);
   SelectObject (hdc, hOldBrush);
   DeleteObject(hBrush);

return S_OK;
}

ÀÌÁ¦ È£Ã⠵Ǵ ÇÔ¼ö¸¦ Ãß°¡ ÇØ¾ß CalcPoints , ±× ¼± intersections.nbsp; ÁÂÇ¥ °è»ê ÀÌ·¯ÇÑ °è»ê RECT º¯¼ö¸¦ ÇÔ¼ö¿¡ Àü´Þ µÇ´Â °ÍÀÔ´Ï´Ù.? ¸ÕÀú Polyctl.hÀÇ IPolyCtl Ŭ·¡½ºÀÇ °ø¿ë ¼½¼Ç¿¡ CalcpointsÀÇ Á¤ÀÇ Ãß°¡ ÇØ¾ß(&N):

voidnbsp;?? CalcPoints (const RECT & rc)

IPolyCtl Ŭ·¡½ºÀÇ °ø¿ë ¼½¼ÇÀ» Áö±Ý ÀÌ·¸°Ô º¸ÀÏ:

/ / IPolyCtl
°ø°³:
   STDMETHOD(get_Sides) (/ * [out, retval] * / ªÀº * newVal);
   STDMETHOD(put_Sides) (/ * [¿¡] * / newVal ªÀº);
   voidnbsp;?? CalcPoints (const RECT & rc)

´ÙÀ½ÀÇ ±¸ÇöÀ» Ãß°¡ ÇÕ´Ï´Ù CalcPoints ÇÔ¼ö¸¦ PolyCtl.cpp ÆÄÀÏÀÇ ³¡:

void CPolyCtl::CalcPoints (const RECTamp; rc)
{
   const ´õºí pi 3.14159265358979; =
   Æ÷ÀÎÆ® ptCenter;
   ÀÌÁß dblRadiusx = (rc.right-rc.left) / 2;
   ÀÌÁß dblRadiusy = (rc.bottom-rc.top) / 2;
   ÀÌÁß dblAngle = 3 * pi / 2;????????? / / »ó´Ü¿¡¼­ ½ÃÀÛ
   ÀÌÁß dblDiff = 2 * pi / m_nSides;?? / / °¢ °¢µµ »çÀÌµå ¸¸µé °ÍÀÔ´Ï´Ù
   ptCenter.x = (rc.left + rc.right) / 2;
   ptCenter.y = (rc.top + rc.bottom) / 2;

/ / °¢ Ãø¸é¿¡ ´ë ÇÑ Æ÷ÀÎÆ®¸¦ °è»ê
   ¿¡ ´ë ÇÑ (int I = 0; ³­ < m_nSides; i + +)
   {
      m_arrPoint [i].x = (±ä) (dblRadiusx * cos(dblAngle) + ptCenter.x + 0.5);
      m_arrPoint [i].y = (±ä) (dblRadiusy * sin(dblAngle) + ptCenter.y + 0.5);
      dblAngle + = dblDiff;
   }
}

ÀÌÁ¦, ÃʱâÈ­ m_clrFillColor . ±âº» »öÀ¸·Î ³ì»öÀ» ¼±Åà ÇÏ °íÀÌ ÁÙÀ» Ãß°¡ ÇÕ´Ï´Ù CPolyCtl Polyctl.hÀÇ »ý¼ºÀÚ:

   m_clrFillColor = RGB (0, 0xFF, 0)

»ý¼ºÀÚ´Â ÀÌÁ¦ÀÌ Ã³·³ º¸ÀÌ´Â:

CPolyCtl()
{
   m_nSides = 3;
   m_clrFillColor = RGB (0, 0xFF, 0);
}

ÀÌÁ¦ ÄÁÆ®·ÑÀ» ´Ù½Ã ÀÛ¼º ÇÏ °í ´Ù½Ã ½Ãµµ ÇϽʽÿÀ. ActiveX ÄÁÆ®·Ñ Å×½ºÆ® ÄÁÅ×ÀÌ³Ê ¸¦ ¿­°í ÄÁÆ®·ÑÀ» »ðÀÔ ÇÕ´Ï´Ù. ¿ø ¾È¿¡ ³ì»ö »ï°¢ÇüÀÌ Ç¥½Ã µË´Ï´Ù. ¾Æ·¡ ´Ü°è¸¦ ¼öÇà ÇÏ ¿© ¸é ¼ö¸¦ º¯°æÇØ º¸½Ê½Ã¿À. Å×½ºÆ® ÄÁÅ×À̳ʳ»¿¡¼­ ÀÌÁß ÀÎÅÍÆäÀ̽º¿¡ ´ë ÇÑ ¼Ó¼ºÀ» ¼öÁ¤ ÇÏ·Á¸é ¸Þ¼­µå È£Ãâ À» »ç¿ë ÇÏ ¿©:

  1. Å×½ºÆ® ÄÁÅ×À̳ʿ¡¼­ ÄÁÆ®·Ñ ¸Þ´º¿¡¼­ ¸Þ¼­µå È£Ãâ À» Ŭ¸¯ ÇÕ´Ï´Ù.
    ¸Þ¼­µå È£Ãâ ´ëÈ­ »óÀÚ°¡ Ç¥½Ã µË´Ï´Ù.

  2. ¸Þ¼­µå À̸§ ¿¡¼­ ¾çÂÊ ¼Ó¼ºÀÇ PropPut ¹öÀü Ŭ¸¯¡£

  3. ¸Å°³ º¯¼ö °ª ÆíÁý »óÀÚ¿¡ 5¸¦ ÀÔ·Â ÇÏ °í °ª ¼³Á¤ À» Ŭ¸¯ÇÕ´Ï´Ù ÇÑ ´ÙÀ½ÀÌ È£Ãâ À» Ŭ¸¯¡£

ÄÁÆ®·Ñ º¯°æ µÇÁö ¾Ê½À´Ï´Ù È®ÀÎ ÇÕ´Ï´Ù. ¹«¾ùÀÌ À߸øµÇ¾ú³ª¿ä? ¼³Á¤ ÇÏ ¿© ³»ºÎÀûÀ¸·Î ¸é ¼ö¸¦ º¯°æ ÇÏ´Â ÀÖÁö¸¸ ÇØ´ç m_nSides º¯¼ö, ´ç½ÅÀº ´Ù½Ã Ä¥Çϱâ ÄÁÆ®·ÑÀ» ¹ß»ý ÇÏÁö ¾Ê¾Ò´Ù. ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î Àüȯ ÇÏ °í Å×½ºÆ® ÄÁÅ×ÀÌ³Ê ¸¦ ãÀ» °ÍÀÔ´Ï´Ù ´Ù½Ã Àüȯ ÇÏ´Â °æ¿ì ÄÁÆ®·ÑÀÌ ´Ù½Ã ±×·ÁÁý´Ï´Ù ÀÖ°í Áö±Ý Ãø¸éÀÇ ¿Ã¹Ù¸¥ ¹øÈ£¸¦¡£

ÀÌ ¹®Á¦¸¦ ÇØ°á ÇÏ·Á¸é Ãß°¡ IViewObjectExImpl, ¸é ¼ö¸¦ ¼³Á¤ Çϸé Á¤ÀÇ µÈ FireViewChange ÇÔ¼ö¸¦ È£Ãâ ÇØ¾ß ÇÕ´Ï´Ù. ÄÁÆ®·ÑÀ» ÀÚü â¿¡¼­ ½ÇÇà ÇÏ´Â °æ¿ì FireViewChange InvalidateRect API¸¦ Á÷Á¢ È£Ã⠵˴ϴÙ. ÄÁÆ®·ÑÀÌ ¾ø´Â ½ÇÇà ÁßÀÎ InvalidateRect ¸Þ¼­µå°¡ ÄÁÅ×À̳ÊÀÇ »çÀÌÆ® ÀÎÅÍÆäÀ̽º¿¡ È£Ã⠵˴ϴÙ. ÀÌ·¸°Ô Çϸé ÀÚü¸¦ ´Ù½Ã ±×¸± ÄÁÆ®·Ñ¡£

»õ·Î¿î put_Sides ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.:

STDMETHODIMP CPolyCtl::put_Sides(short newVal)
{
   °æ¿ì (newVal gt; 2 & & newVal < 101)
   {
      m_nSides = newVal;
      FireViewChange();
      return S_OK;
   }
   ´Ù¸¥
      ¿À·ù ¹Ýȯ (_T ("µµÇü ÀÖ¾î¾ß 3 À§¿Í 100 »çÀÌ)");
}

FireViewChange¸¦ Ãß°¡ÇÑ ÈÄ¿¡ ´Ù½Ã ÀÛ¼º ÇÏ °í ÄÁÆ®·ÑÀ» ´Ù½Ã ½Ãµµ ÇϽʽÿÀ. Áï½Ã º¯°æ Á¦¾î¸¦ º¼ÀÌ ½Ã°£ÀÌ ¸é ¼ö¸¦ º¯°æ ÇÏ °í InvokeÀ» Ŭ¸¯ÇÕ´Ï´Ù¡£

´ÙÀ½À¸·Î, ÄÁÆ®·Ñ¿¡ À̺¥Æ®¸¦ Ãß°¡ µË´Ï´Ù.

3 ´Ü°è¸¦ ´Ù½Ã |nbsp; 5 ´Ü°è¿¡(&N)

Index