¼Ó¼º ÆäÀÌÁö´Â ¼Ó¼º ÆäÀÌÁö¸¦ ¿ä±¸ ÇÏ´Â °æ¿ì °øÀ¯¸¦ Çã¿ë ÇÏ´Â º°µµ COM °³Ã¼·Î ±¸Çö µË´Ï´Ù. ÄÁÆ®·Ñ¿¡ ¼Ó¼º ÆäÀÌÁö¸¦ Ãß°¡ ÇÏ·Á¸é ATL °³Ã¼ ¸¶¹ý»ç¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
ATL °³Ã¼ ¸¶¹ý»ç¸¦ ½ÃÀÛ ÇÏ °í ÄÁÆ®·Ñ ¿ÞÂÊ¿¡¼ ¹üÁÖ¸¦ ¼±Åà ÇÕ´Ï´Ù. ¿À¸¥ÂÊ¿¡ ¼Ó¼º ÆäÀÌÁö ¸¦ ¼±Åà ÇÏ °í À» Ŭ¸¯ÇÕ´Ï´Ù¡£
´Ù½Ã »õ °³Ã¼ÀÇ À̸§À» ÀÔ·ÂÇÒ ¼ö ÀÖµµ·Ï ´ëÈ »óÀÚ¸¦ ¾ò´Â´Ù. PolyProp °³Ã¼¸¦ È£Ãâ ÇÏ °í ªÀº À̸§ ÆíÁý »óÀÚ¿¡ ÇØ´ç À̸§À» ÀÔ·ÂÇÕ´Ï´Ù¡£

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

´ÙÀ½ ¼¼ °³ÀÇ ÆÄÀÏÀÌ ¸¸µé¾îÁý´Ï´Ù.:
| ÆÄÀÏ | ¼³¸í |
| PolyProp.h | C + + Ŭ·¡½º¸¦ Æ÷ÇÔ CPolyProp , ¼Ó¼º ÆäÀÌÁö¸¦ ±¸Çö Çϴ¡£ |
| PolyProp.cpp | PolyProp.h ÆÄÀÏÀ» Æ÷ÇÔ¡£ |
| PolyProp.rgs | ¼Ó¼º ÆäÀÌÁö °³Ã¼¸¦ µî·Ï ÇÏ´Â ·¹Áö½ºÆ®¸® ½ºÅ©¸³Æ®¡£ |
´ÙÀ½ ÄÚµå º¯°æ ³»¿ëÀÌ ¶ÇÇÑ:
PolyProp Ŭ·¡½º´Â Polygon.idl ÆÄÀÏ¿¡ Ãß°¡ µË´Ï´Ù¡£
ÀÌÁ¦ ¼Ó¼º ÆäÀÌÁö¿¡ Ç¥½ÃÇÒ Çʵ带 Ãß°¡ ÇÕ´Ï´Ù. 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)