6 ´Ü°è: ¼Ó¼º ÆäÀÌÁö Ãß°¡

¼Ó¼º ÆäÀÌÁö´Â ¼Ó¼º ÆäÀÌÁö¸¦ ¿ä±¸ ÇÏ´Â °æ¿ì °øÀ¯¸¦ Çã¿ë ÇÏ´Â º°µµ COM °³Ã¼·Î ±¸Çö µË´Ï´Ù. ÄÁÆ®·Ñ¿¡ ¼Ó¼º ÆäÀÌÁö¸¦ Ãß°¡ ÇÏ·Á¸é ATL °³Ã¼ ¸¶¹ý»ç¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

ATL °³Ã¼ ¸¶¹ý»ç¸¦ ½ÃÀÛ ÇÏ °í ÄÁÆ®·Ñ ¿ÞÂÊ¿¡¼­ ¹üÁÖ¸¦ ¼±Åà ÇÕ´Ï´Ù. ¿À¸¥ÂÊ¿¡ ¼Ó¼º ÆäÀÌÁö ¸¦ ¼±Åà ÇÏ °í À» Ŭ¸¯ÇÕ´Ï´Ù¡£

´Ù½Ã »õ °³Ã¼ÀÇ À̸§À» ÀÔ·ÂÇÒ ¼ö ÀÖµµ·Ï ´ëÈ­ »óÀÚ¸¦ ¾ò´Â´Ù. PolyProp °³Ã¼¸¦ È£Ãâ ÇÏ °í ªÀº À̸§ ÆíÁý »óÀÚ¿¡ ÇØ´ç À̸§À» ÀÔ·ÂÇÕ´Ï´Ù¡£

¾Ë¸² ÀÎÅÍÆäÀ̽º ÆíÁý »óÀÚ ¹ÛÀ¸·Î ȸ»ö ÀÌ´Ù. ÀÌ ¶§¹®¿¡ ¼Ó¼º ÆäÀÌÁö´Â »ç¿ëÀÚ ÁöÁ¤ ÀÎÅÍÆäÀ̽º¸¦ ÇÊ¿ä ÇÏÁö ¾Ê½À´Ï´Ù.

¼Ó¼º ÆäÀÌÁöÀÇ Á¦¸ñÀ» ¼³Á¤ ÇÏ·Á¸é ¹®ÀÚ¿­ ÅÇÀ» Ŭ¸¯ ÇÕ´Ï´Ù. ¼Ó¼º ÆäÀÌÁöÀÇ Á¦¸ñÀº ÇØ´ç ÆäÀÌÁö ÅÇ¿¡ Ç¥½Ã µÇ´Â ¹®ÀÚ¿­ÀÔ´Ï´Ù. Amp; ÀԷ´ٰ¢Çü Á¦¸ñÀ¸·Î. Doc ¹®ÀÚ¿­ ¼Ó¼º ÇÁ·¹ÀÓ »óÅ ¼± ¶Ç´Â µµ±¸ ÆÁ¿¡ ³Ö¾î »ç¿ë ÇÏ´Â ¼³¸íÀÔ´Ï´Ù. Âü°í°¡ÀÌ ¹®ÀÚ¿­ ÇÏÁö¸¸ ´ç½ÅÀº ÇöÀç Ç¥ÁØ ¼Ó¼º ÇÁ·¹ÀÓ »ç¿ë ÇÏÁö´Â ¾î·µç¿¡¼­ ±×°ÍÀ» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Helpfile À» »ý¼º ÇÏ´Â ¼ø°£¿¡, ±×·¡¼­ ±× ÅØ½ºÆ® »óÀÚ¿¡¼­ Ç׸ñÀ» Áö¿ï ·Á ÇÏÁö. È®ÀÎ À» ´©¸£°í ¼Ó¼º ÆäÀÌÁö °³Ã¼¸¦ ¸¸µé °ÍÀÔ´Ï´Ù(&A)¡£

´ÙÀ½ ¼¼ °³ÀÇ ÆÄÀÏÀÌ ¸¸µé¾îÁý´Ï´Ù.:

ÆÄÀÏ ¼³¸í
PolyProp.h C + + Ŭ·¡½º¸¦ Æ÷ÇÔ CPolyProp , ¼Ó¼º ÆäÀÌÁö¸¦ ±¸Çö Çϴ¡£
PolyProp.cpp PolyProp.h ÆÄÀÏÀ» Æ÷ÇÔ¡£
PolyProp.rgs ¼Ó¼º ÆäÀÌÁö °³Ã¼¸¦ µî·Ï ÇÏ´Â ·¹Áö½ºÆ®¸® ½ºÅ©¸³Æ®¡£

´ÙÀ½ ÄÚµå º¯°æ ³»¿ëÀÌ ¶ÇÇÑ:

ÀÌÁ¦ ¼Ó¼º ÆäÀÌÁö¿¡ Ç¥½ÃÇÒ Çʵ带 Ãß°¡ ÇÕ´Ï´Ù. Polygon.rc ´ëÈ­ »óÀÚ¿¡¿¡¼­´Â ¿©±â¿¡ ±ÍÇÏÀÇ ÄÁÆ®·ÑÀ» »ðÀÔ ÇÏ·Á¸é ¾Ë·Á ÁÖ´Â ·¹À̺íÀ» Á¦¿ÜÇÑ ºñ¾î °øÁö. ÇØ´ç ·¹À̺íÀ» »èÁ¦ ÇÏ °í Ãß°¡ ÅØ½ºÆ®¸¦ Æ÷ÇÔ ÇÏ´Â "»çÀ̵å:". ·¹ÀÌºí ¿·¿¡ ÆíÁý »óÀÚ¸¦ Ãß°¡ ÇÏ °í ID¸¦ ºÎ¿©IDC_SIDES¡£

PolyProp.h ÆÄÀÏ »ó´Ü¿¡ Polygon.h Æ÷ÇÔ:

# include "Polygon.h"nbsp; / / IpolyctlÀÇ Á¤ÀÇ(&N)

ÀÌÁ¦ Ȱ¼ºÈ­¸¦ CPolyProp Ŭ·¡½º Àû¿ë ´ÜÃ߸¦ ´©¸¦ ¶§ °³Ã¼ÀÇ ¸é ¼ö¸¦ ¼³Á¤ ÇÕ´Ï´Ù. º¯È­´Â Apply Polyprop.h¿¡¼­ ´ÙÀ½°ú °°Àº ÀÛµ¿¡£

STDMETHOD(Apply)(void)
{
   USES_CONVERSION;
   ATLTRACE(_T("CPolyProp::Apply\n"));
   ¿¡ ´ë ÇÑ (UINT I = 0; ³­ lt; m_nObjects; i + +)
   {
      < IPolyCtl, ¹× IID_IPolyCtl > CComQIPtr pPoly(m_ppUnk[i]);
      ªÀº nSides (short)GetDlgItemInt(IDC_SIDES); =
      ½ÇÆÐ ÇÏ´Â °æ¿ì (pPoly-> put_Sides(nSides))
      {
         CComPtr <IErrorInfo> pError;
         CComBSTR strError;
         GetErrorInfo (0 & pError);
         pError-> GetDescription(&strError);
         MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
         E_FAIL; ¹Ýȯ
      }
   }
   m_bDirty = FALSE;
   return S_OK;
}

¼Ó¼º ÆäÀÌÁö´Â ÇÑ ¹ø¿¡, ±×°Í¿¡ ¿¬°á µÈ Çϳª ÀÌ»óÀÇ Å¬¶óÀÌ¾ðÆ® ÀÖ´Ù ±×·¡¼­ Apply ÁÖÀ§¸¦ ¹Ýº¹ ÇÏ °í È£Ãâ ÇÏ´Â ÇÔ¼ö put_Sides ÆíÁý »óÀÚ¿¡¼­ °Ë»ö µÈ °ªÀ» »ç¿ë ÇÏ ¿© °¢ Ŭ¶óÀÌ¾ðÆ®¿¡. °¢ °³Ã¼¿¡ ´ëÇØ QueryInterface ¸¦ ¼öÇà ÇÏ´Â CComQIPtr Ŭ·¡½º¸¦ »ç¿ë ÇÏ´Â IPolyCtl IUnknown ÀÎÅÍÆäÀ̽º (¿¡ ÀúÀ带 m_ppUnk ¹è¿­)¡£

ÄÚµå´Â ÀÌÁ¦ ±× »ç½ÇÀº ¾çÂÊ ¼Ó¼ºÀ» ¼³Á¤ È®ÀÎ ÇÕ´Ï´Ù. ½ÇÆÐ ÇÏ´Â °æ¿ì ÄÚµå´Â IErrorInfo ÀÎÅÍÆäÀ̽º¿¡¼­ ¿À·ù Á¤º¸¸¦ Ç¥½Ã ÇÏ´Â ¸Þ½ÃÁö »óÀÚ¸¦ Ç¥½Ã ÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÄÁÅ×ÀÌ³Ê ISupportErrorInfo ÀÎÅÍÆäÀ̽º¿¡ ´ë ÇÑ °³Ã¼¸¦ ¿äû ÇÏ °í °³Ã¼°¡ ¼³Á¤ ¿À·ù Á¤º¸¸¦ Áö¿ø ÇÏ´ÂÁö ¿©ºÎ¸¦ È®ÀÎ ÇÏ·Á¸é InterfaceSupportsErrorInfo ¸¦ ¸ÕÀú È£Ãâ ÇÏ´Â ¹æ¹ý. ÇÏÁö¸¸ ±× ¼ö Ç¥¸¦ Æ÷±â ¼ö ÀÖ½À´Ï´Ù ÄÁÆ®·Ñ À̹ǷΡ£

CComPtr À» »ç¿ë Çϸé ÀÚµ¿À¸·Î ÀÎÅÍÆäÀ̽º¿¡¼­ Ãâ½Ã ¸¦ È£ÃâÇÒ Çʿ䰡 ¾ø½À´Ï´Ù, ÂüÁ¶¸¦ ó¸® ÇÏ ¿© ¼ö ÀÖ½À´Ï´Ù. CComBSTR Çϸé BSTR ó¸®¿Í ÃÖÁ¾ SysFreeString È£ÃâÀ» ¼öÇàÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ¶ÇÇÑ »ç¿ë ÇÏ¸é ´Ù¾ç ÇÑ ¹®ÀÚ¿­ º¯È¯ Ŭ·¡½º Áß Çϳª (À̰ÍÀÌ USES_CONVERSION ¸ÅÅ©·Î ÇÔ¼öÀÇ ½ÃÀÛ ½Ã Ãß°¡) ÇÊ¿äÇÑ °æ¿ì BSTR ¸¦ º¯È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¶ÇÇÑ Àû¿ë ´ÜÃß »ç¿ëÇÒ ¼ö¸¦ ³ªÅ¸³»´Â ¼Ó¼º ÆäÀÌÁöÀÇ ´õƼ Ç÷¡±×¸¦ ¼³Á¤ ÇØ¾ß ÇÕ´Ï´Ù. »ç¿ëÀÚ Ãø¸é ÆíÁý »óÀÚ¿¡¼­ °ªÀ» º¯°æÇÒ ¶§ ¹ß»ý ÇÕ´Ï´Ù. ¼Ó¼º ÆäÀÌÁö Ŭ·¡½º (CPolyProp) Ŭ·¡½º ºä ¿¡¼­ ´ÜÃ߷ΠŬ¸¯ ÇÏ °í ¹Ù·Î °¡±â menu.nbsp;¿¡¼­ Windows ¸Þ½ÃÁö 󸮱â Ãß°¡... ¸¦ ¼±ÅÃÇÕ´Ï´Ù °³Ã¼ »óÀÚ¿¡¼­ IDC_SIDES¸¦ ¼±Åà ÇÏ °í EN_CHANGE ¸Þ½ÃÁö Ãß°¡(&N)¡£

Áö±Ý ÇÏ´Â polyprop.h¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ ÇÕ´Ï´Ù OnChangeSides ÇÔ¼ö (¸¶¹ý»ç °Å±â¿¡ ³Ö¾î ¸ðµç Äڵ带 »èÁ¦ ÇÏ´Â):

 LRESULT OnChangeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
   SetDirty(TRUE);
   0; ¹Ýȯ
}(&A)

OnChangeSides¿¡ ´ë ÇÑ EN_CHANGE ÅëÁö¿Í ÇÔ²² WM_COMMAND ¸Þ½ÃÁö¸¦ º¸³¾ ¶§ È£Ã⠵˴ϴٴ IDC_SIDES ÄÁÆ®·Ñ. OnChangeSides ´ÙÀ½ È£Ãâ SetDirty Àü´Þ »ç½Ç ¼Ó¼º ÆäÀÌÁö´Â Áö±Ý ´õ·¯¿î ÇÏ °í Àû¿ë ´ÜÃ߸¦ Ȱ¼ºÈ­ ÇØ¾ß ÇÕ´Ï´Ù¡£

ÀÌÁ¦ ÄÁÆ®·Ñ¿¡ ¼Ó¼º ÆäÀÌÁö¸¦ Ãß°¡ ÇÕ´Ï´Ù. ATL °³Ã¼ ¸¶¹ý»ç ÇÏÁö ¾Ê½À´Ï´ÙÀÌ ´ç½ÅÀ» À§ÇØ ÀÚµ¿À¸·Î ÀÌÈÄ ÇÁ·ÎÁ§Æ®¿¡ ÄÁÆ®·ÑÀÌ ¿©·¯ °³ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. Polyctl.h¸¦ ¿­°í ¼Ó¼º Áöµµ¿¡ÀÌ ÁÙÀ» Ãß°¡:

   PROP_ENTRY ("Ãø¸é", 1, CLSID_PolyProp)

ÄÁÆ®·ÑÀÇ ¼Ó¼º ¸Ê¿¡ Áö±Ý ÀÌ°Í Ã³·³ º¸ÀÌ´Â:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY ("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY ("_cy", m_sizeExtent.cy, VT_UI4)
   PROP_ENTRY ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
   PROP_ENTRY ("Ãø¸é", 1, CLSID_PolyProp)
   / / ¿¹Á¦ Ç׸ñ
   / / PROP_ENTRY ("¼Ó¼º ¼³¸í", dispid, clsid)
   / / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Ãß°¡ÇÑ ¼ö¸¦ PROP_PAGE ÇÏÁö¸¸, »ç¿ë ÇÏ´Â °æ¿ì ¼Ó¼º ÆäÀÌÁöÀÇ CLSID¿Í ¸ÅÅ©·Î PROP_ENTRY ¸ÅÅ©·Î °°ÀÌ, ¾çÂÊ ¼Ó¼º °ªÀº ÄÁÆ®·ÑÀ» ÀúÀå ÇÏ´Â °æ¿ì¿¡ ÀúÀå µË´Ï´Ù. ¸ÅÅ©·Î¿¡ ¼¼ °³ÀÇ ¸Å°³ º¯¼ö´Â ¼Ó¼ºÀÇ DISPID ¹× ¼Ó¼º¿¡´Â ¼Ó¼º ÆäÀÌÁöÀÇ CLSID ¼Ó¼º ¼³¸í ÇÕ´Ï´Ù. Visual basic ÄÁÆ®·ÑÀ» ·Îµå ÇÏ °í µðÀÚÀΠŸÀÓ¿¡ ¸é ¼ö¸¦ ¼³Á¤ ÇÏ´Â ¿¹¸¦ µé¾î, °æ¿ì¿¡ À¯¿ë ÇÕ´Ï´Ù. ¸é ¼ö Visual Basic ÇÁ·ÎÁ§Æ®¸¦ ´Ù½Ã ·Îµå º¹¿ø ÀÌÈÄ ¸é ¼ö ÀúÀå¡£

ÀÌÁ¦ ÇØ´ç ÄÁÆ®·ÑÀ» ºôµå ¹× ActiveX ÄÁÆ®·Ñ Å×½ºÆ® ÄÁÅ×À̳ʿ¡ »ðÀÔ ÇÕ´Ï´Ù. Å×½ºÆ® ÄÁÅ×À̳ʿ¡¼­ ÆíÁý ¸Þ´º¿¡¼­ Ŭ¸¯ PolyCtl Ŭ·¡½º °³Ã¼. ¼Ó¼º ÆäÀÌÁö°¡ ³ªÅ¸³³´Ï´Ù; ´Ù°¢Çü ÅÇ ¼±Åá£

óÀ½ Àû¿ë ´ÜÃß´Â ºñȰ¼ºÈ­ µË´Ï´Ù. ¾çÂÊ¿¡ °ªÀ» ÀÔ·Â ÇÏ´Â ½ÃÀÛ »óÀÚ¸¦ ÆíÁý ÇÏ °í Àû¿ë ´ÜÃß°¡ Ȱ¼ºÈ­ µÉ. °ªÀ» ÀÔ·ÂÀ» ¸¶Ä£ ÈÄ Àû¿ë ¹öưÀ» Ŭ¸¯ ÇÕ´Ï´Ù. ÄÁÆ®·Ñ Ç¥½Ã º¯°æ ÇÏ °í Àû¿ë ¹öưÀ» ´Ù½Ã ºñȰ¼ºÈ­ µË´Ï´Ù. À߸ø µÈ °ªÀ» ÀÔ·Â ÇÑ¿¡¼­ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¿À·ù ¼³¸íÀ» Æ÷ÇÔ µÈ ¸Þ½ÃÁö »óÀÚ°¡ ³ªÅ¸³³´Ï´Ù ÇÕ´Ï´Ù put_Sides ÇÔ¼ö¡£

´ÙÀ½ À¥ ÆäÀÌÁö¿¡¼­ ÄÁÆ®·ÑÀ» ³õÀ» °Ô ¿ä¡£

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

Index