IOleCommandTarget ÀÎÅÍÆäÀ̽º °³Ã¼ ¹× ±×µéÀÇ ÄÁÅ×À̳ʸ¦ ¼·Î °Ô ¸í·ÉÀ» Àü´Þ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, °³Ã¼ÀÇ µµ±¸ ¸ðÀ½ ´ÜÃß¿Í °°Àº Àμâ, Àμ⠹̸® º¸±â, ÀúÀå, »õ·Î ¸¸µé±â, È®´ë/Ãà¼Ò¸í·ÉÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °³Ã¼°¡ Çß´Ù IOleCommandTargetÀ» Áö ¿øÇÏ´Â ÄÁÅ×À̳ʿ¡ Æ÷ÇÔ µÇ¾î ÀÖ´Â °æ¿ì °³Ã¼´Â ÇØ´ç ´ÜÃ߸¦ »ç¿ë ÇÏ °í »ç¿ëÀÚ µéÀ» Ŭ¸¯ÇÒ ¶§ ó¸® ÇÏ´Â ÄÁÅ×À̳ʿ¡ ¸í·ÉÀ» Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. ÄÁÅ×ÀÌ³Ê ÀÚü¸¦ Àμâ ÇÏ·Á¸é Æ÷ÇÔ µÈ °³Ã¼¸¦ ¿øÇÏ´Â °æ¿ì ±×°ÍÀº Æ÷ÇÔ µÈ °³Ã¼ÀÇ IOleCommandTarget ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ¸í·ÉÀ» Àü¼Û ÇÏ ¿©ÀÌ ¿äûÀ» ¸¸µé ¼ö ÀÖ½À´Ï´Ù.
IOleCommandTarget ´Â ÀÚµ¿È¿Í °°Àº ÀÎÅÍÆäÀ̽º¸¦ »ç¿ë ÇÏ´Â ¼¹ö¿¡¼ ¸Þ¼µå¸¦ È£Ãâ Çϴ Ŭ¶óÀ̾ðÆ®¿¡ ÀÇÇØ »ç¿ë µË´Ï´Ù. ±×·¯³ª ÇÁ·Î±×·¡¸ÓÀÇ IDispatch ÀϹÝÀûÀ¸·Î ºñ½Ñ Invoke ¸Þ¼µå¸¦ »ç¿ë ÇÏÁö ¾Ê¾Æµµ µÇ¹Ç·Î ÀÚµ¿È ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ È£Ãâ ÇÏ´Â ¿À¹ö Çìµå¸¦ ÀúÀå IOleCommandTarget À» »ç¿ë ÇÏ ¿©¡£
MFC´Â IOleCommandTarget ÀÎÅÍÆäÀ̽º ÆÄ°ß ¸í·ÉÀ» ¼¹ö¿¡ ¾×Ƽºê ¹®¼ ÄÁÅ×ÀÌ³Ê ¼ö ÀÖµµ·Ï ¾×Ƽºê ¹®¼ ¼¹ö¿¡ ÀÇÇØ »ç¿ë µË´Ï´Ù. ¾×Ƽºê ¹®¼ ¼¹ö Ŭ·¡½º, CDocObjectServerItem, MFC ÀÎÅÍÆäÀ̽º ¸ÊÀ» »ç¿ë ÇÏ ¿© (ÂüÁ¶ TN038: MFC/OLE IUnknown ±¸Çö) IOleCommandTarget ÀÎÅÍÆäÀ̽º¸¦ ±¸Çö ÇÏ¡£
IOleCommandTarget ´Â ¶ÇÇÑ COleFrameHook Ŭ·¡½º¿¡¼ ±¸Çö µË´Ï´Ù. COleFrameHook ´Â Á¦ÀÚ¸®¿¡¼ ÆíÁý ÄÁÅ×À̳ÊÀÇ ÇÁ·¹ÀÓ Ã¢ ±â´ÉÀ» ±¸Çö ÇÏ´Â ¹®¼È µÇÁö ¾ÊÀº MFC Ŭ·¡½ºÀÔ´Ï´Ù. ¶ÇÇÑ COleFrameHook MFC ÀÎÅÍÆäÀ̽º ¸ÊÀ» »ç¿ë ÇÏ ¿© IOleCommandTarget ÀÎÅÍÆäÀ̽º¸¦ ±¸Çö ÇÕ´Ï´Ù. COleFrameHookÀÇ ±¸ÇöÀÇ IOleCommandTarget COleDocObjectItemOLE ¸í·É Àü´Þ-¾×Ƽºê ¹®¼ ÄÁÅ×À̳ʸ¦ ÆÄ»ý ÇÕ´Ï´Ù. ÀÌ·¸°Ô Çϸé Æ÷ÇÔ µÈ ¾×Ƽºê ¹®¼ ¼¹ö¿¡¼ ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¸ðµç MFC ¾×Ƽºê ¹®¼ ÄÁÅ×À̳ʡ£
MFC OLE ¸í·É Áöµµ
MFC °³¹ßÀÚ°¡ È°¿ëÇÒ ¼ö IOleCommandTarget MFC OLE ¸í·É Áöµµ »ç¿ë ÇÏ ¿©. OLE ¸í·É Áöµµ ¸Þ½ÃÁö OLE ¸í·É ¸í·É Áöµµ Æ÷ÇÔ Çϴ Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö¿¡ ¸ÅÇÎÇÒ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ Áöµµ ó·³. ÀÌ ÀÛ¾÷À» ÇÏ·Á¸é ¸ÅÅ©·Î ó¸® ¸í·ÉÀ», OLE ¸í·É ¹× ¸í·É IDÀÇ OLE ¸í·É ±×·ìÀ» ÁöÁ¤ ÇÏ·Á¸é ¸í·É Áöµµ¿¡¼ Àå¼Ò¸¦ WM_COMMAND ¸Þ½ÃÁö¸¦ OLE ¸í·ÉÀ» ¹ÞÀ¸¸é º¸³»Áú °Í ÀÌ´Ù. ¶ÇÇÑ MFC Ç¥ÁØ OLE ¸í·É¿¡ ´ë ÇÑ ´Ù¾ç ÇÑ ¹Ì¸® Á¤ÀÇ µÈ ¸ÅÅ©·Î Á¦°øÇÕ´Ï´Ù. Ç¥ÁØ OLEÀÇ ¸ñ·Ï¿¡ ´ë ÇÑ ¸í·É¿¡ ´ë ÇÑ ¿ø·¡ ¼³°è µÈ Microsoft Office ÀÀ¿ë ÇÁ·Î±×·¥°ú ÇÔ²² »ç¿ë ÇÏ ¿©, docobj.h¿¡¼ Á¤ÀÇ ÇÏ´Â OLECMDID ¿°ÅÇüÀ» ÂüÁ¶ ÇϽʽÿÀ¡£
OLE ¸í·É Áöµµ Æ÷ÇÔ ÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ OLE ¸í·ÉÀ» ¹ÞÀ¸¸é MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ OLE ¸í·É Áöµµ¿¡¼ ¿äûÇÑ ¸í·É¿¡ ´ë ÇÑ ¸í·É ID¿Í ¸í·É ±×·ìÀ» ã¾Æ ÇÏ·Á°í ½Ãµµ ÇÕ´Ï´Ù. ÀÏÄ¡ ÇÏ´Â °æ¿ì WM_COMMAND ¸Þ½ÃÁö ¿äûµÈ ¸í·É ID¿Í ¸í·É Áöµµ Æ÷ÇÔ ÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥¿¡ Àü´Þ µË´Ï´Ù. ( ON_OLECMD ¾Æ·¡ ¼³¸í ÂüÁ¶). ÀÌ·± ¹æ½ÄÀ¸·Î OLE ¸í·ÉÀº ÀÀ¿ë ÇÁ·Î±×·¥¿¡ µð½ºÆÐÄ¡µÇ´Â MFC¿¡ ÀÇÇØ WM_COMMAND ¸Þ½ÃÁö¿¡ ¼³Á¤ µÇ¾î ÀÖ½À´Ï´Ù. MFC Ç¥ÁØÀ» »ç¿ë ÇÏ ¿© ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö ¸ÊÀ» ÅëÇØ WM_COMMAND ¸Þ½ÃÁö¸¦ ¶ó¿ìÆÃÇÑ ´ÙÀ½ ¸í·É ¶ó¿ìÆà ¾ÆÅ°ÅØó¡£
¸Þ½ÃÁö Áöµµ´Â ´Þ¸® MFC OLE ¸í·É Áöµµ Classwizard¿¡ ÀÇÇØ Áö¿ø µÇÁö ¾Ê½À´Ï´Ù. MFC °³¹ßÀÚ°¡ OLE ¸í·É Áöµµ Áö¿ø ¹× OLE ¸í·É Áöµµ Ç׸ñÀ» Á÷Á¢ Ãß°¡ ÇØ¾ß ÇÕ´Ï´Ù. OLE ¸í·É ÇöÀç ¹®¼ ´ç½Ã ÇÑ WM_COMMAND ¸Þ½ÃÁö ¶ó¿ìÆà üÀο¡ ÀÖ´Â ¸ðµç Ŭ·¡½º¿¡¼ MFC ¾×Ƽºê ¹®¼ ¼¹ö¿¡ Áöµµ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù Àå¼Ò¿¡ ¾×Ƽºê ÄÁÅ×À̳ʿ¡¼ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ Å¬·¡½º´Â CWinApp, CView, CDocument¹× COleIPFrameWnd¿¡¼ ÆÄ»ý µÈ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Å¬·¡½º¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù. ¾×Ƽºê ¹®¼ ÄÁÅ×À̳ʿ¡¼ OLE ¸í·É Áöµµ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù COleDocObjectItem-Ŭ·¡½º¸¦ ÆÄ»ý ÇÕ´Ï´Ù. ¶ÇÇÑ ¾×Ƽºê ¹®¼ ÄÁÅ×À̳ʿ¡¼ WM_COMMAND ¸Þ½ÃÁö¸¸ ¹ß¼Û µË´Ï´Ù COleDocObjectItem¸Þ½ÃÁö ¸Ê¿¡-ÆÄ»ý Ŭ·¡½º¡£
OLE ¸Ê ¸ÅÅ©·Î ¸í·É
´ÙÀ½ ¸ÅÅ©·Î »ç¿ë ÇÏ ¿© Ŭ·¡½º¿¡ ¸í·É Áöµµ ±â´É Ãß°¡:
DECLARE_OLECMD_MAP)
ÀÌ ¸ÅÅ©·Î ¸í·É Áöµµ Æ÷ÇÔ Çϴ Ŭ·¡½ºÀÇ Å¬·¡½º ¼±¾ð (ÀϹÝÀûÀ¸·Î Çì´õ ÆÄÀÏ)¿¡ °£´Ù¡£
BEGIN_OLECMD_MAP (Ŭ·¡½º, baseClass)
Ŭ·¡½º
¸í·É Áöµµ Æ÷ÇÔ Çϴ Ŭ·¡½ºÀÇ À̸§¡£
baseClass
¸í·É Áöµµ Æ÷ÇÔ Çϴ Ŭ·¡½ºÀÇ ±âº» Ŭ·¡½ºÀÇ À̸§¡£
ÀÌ ¸ÅÅ©·Î ¸í·É ÁöµµÀÇ ½ÃÀÛÀ» Ç¥½Ã ÇÕ´Ï´Ù. ÀÌ ¸ÅÅ©·Î »ç¿ë ÇÏ ¿© ¸í·É Áöµµ Æ÷ÇÔ Çϴ Ŭ·¡½ºÀÇ ±¸Çö ÆÄÀÏ¿¡¡£
END_OLECMD_MAP()
ÀÌ ¸ÅÅ©·Î ¸í·É ÁöµµÀÇ ³¡À» Ç¥½Ã ÇÕ´Ï´Ù. ÀÌ ¸ÅÅ©·Î »ç¿ë ÇÏ ¿© ¸í·É Áöµµ Æ÷ÇÔ Çϴ Ŭ·¡½ºÀÇ ±¸Çö ÆÄÀÏ¿¡ ÀÖ½À´Ï´Ù. ÀÌ ¸ÅÅ©·Î Ç×»ó µû¶ó¾ß ÇÕ´Ï´Ù BEGIN_OLECMD_MAP
¸ÅÅ©·Î¡£
ON_OLECMD (pguid, olecmdid, id)
pguid
OLE ¸í·É ¸í·É ±×·ìÀÇ GUID Æ÷ÀÎÅÍÀÔ´Ï´Ù. ÀÌ ¸Å°³ º¯¼ö´Â Ç¥ÁØ OLE ¸í·É ±×·ì¿¡ ´ë ÇÑ NULL¡£
olecmdid
OLE ¸í·É È£ÃâÇÒ ¸í·É ID¡£
id
ÀÌ OLE ¸í·ÉÀ» È£Ãâ ÇÏ¸é ¸í·É Áöµµ Æ÷ÇÔ ÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥¿¡ Àü¼Û µÇµµ·Ï WM_COMMAND ¸Þ½ÃÁöÀÇ ID¡£
»ç¿ë µÈ ON_OLECMD
OLE¿¡ ´ë ÇÑ Ç׸ñÀ» Ãß°¡ ÇÏ·Á¸é ¸í·É Áöµµ¿¡¼ ¸ÅÅ©·Î ó¸® ÇÏ·Á¸é ¸í·É. OLE ¸í·ÉÀ» ¹ÞÀ¸¸é ±×µéÀº ÁöÁ¤µÈ µÈ WM_COMMAND ¸Þ½ÃÁö º¯È¯ µÇ¸ç Ç¥ÁØ MFC ¸í·É ¶ó¿ìÆà ¾ÆÅ°ÅØó¸¦ »ç¿ë ÇÏ ¿© ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö ¸ÊÀ» ÅëÇØ¡£
¿¹Á¦
ó¸® Çϱâ À§ÇØ MFC ¾×Ƽºê ¹®¼ ¼¹ö OLE ¸í·É ó¸® ±â´ÉÀ» Ãß°¡ ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÖ´Â ¿¹Á¦´Â OLECMDID_PRINT OLE ¸í·É. ÀÌ ¿¹Á¦¿¡¼´Â °¡Á¤ Appwizard¸¦ »ç¿ë ÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥Àº È°¼º ¹®¼ ¼¹ö »ý¼º¡£
DECLARE_OLECMD_MAP
Ŭ·¡½º ¼±¾ð¿¡ ¸ÅÅ©·Î¡£¸Þ¸ðnbsp;CView¸¦ »ç¿ë ÇÏ ¿©- WM_COMMAND ¸Þ½ÃÁö ¶ó¿ìÆà üÀο¡ ¾×Ƽºê ¹®¼ ¼¹ö¿¡ Ŭ·¡½º À̹ǷΠÆÄ»ý Ŭ·¡½º(&N)¡£
cMyServerView Ŭ·¡½º: °ø¿ë CView
{
º¸È£ µÈ: / /¸¸ serialization¿¡¼ ¸¸µé±â
CMyServerView();
DECLARE_DYNCREATE(CMyServerView)
DECLARE_OLECMD_MAP()
. . .
}
BEGIN_OLECMD_MAP
¿Í END_OLECMD_MAP
¸ÅÅ©·Î:BEGIN_OLECMD_MAP (CMyServerView, CView)
END_OLECMD_MAP()
BEGIN_OLECMD_MAP (CMyServerView, CView)
ON_OLECMD(NULL,OLECMDID_PRINT,ID_FILE_PRINT)
END_OLECMD_MAP()
Âü°í´Â afxdocob.h¿¡ Á¤ÀÇ µÈ Ç¥ÁØ OLE ¸í·É ¸ÅÅ©·Î Áß Çϳª OLECMDID_PRINT ´Â Ç¥ÁØ OLE ¸í·É ID°¡ Àֱ⠶§¹®¿¡ ON_OLECMD ¸ÅÅ©·Î ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù ON_OLECMD_PRINT ¸ÅÅ©·Î À§ÀÇ ON_OLECMD ¸ÅÅ©·Î·Î µ¿ÀÏÇÑ ÀÛ¾÷À» ¼öÇà ÇÕ´Ï´Ù.
ÄÁÅ×ÀÌ³Ê ÀÀ¿ë ÇÁ·Î±×·¥À» º¸³¾ ¶§ÀÌ ¼¹ö´Â OLECMDID_PRINT ¸í·ÉÀ» ¼¹öÀÇ IOleCommandTarget ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ÀÀ¿ë ÇÁ·Î±×·¥À» Àμâ ÇÏ·Á¸é ¼¹ö ÀÏÀ¸Å°´Â ¼¹ö¿¡¼ MFC Àμ⠸í·É 󸮱⸦ È£Ã⠵˴ϴÙ. À§ÀÇ ´Ü°è¿¡¼ Ãß°¡ Àμ⠸í·ÉÀ» È£Ãâ ÇÏ´Â ¾×Ƽºê ¹®¼ ÄÁÅ×ÀÌ³Ê Äڵ带 ÀÌ·±½ÄÀ¸·Î »ý°åÀ» °Í ÀÌ´Ù:
void CContainerCntrItem::DoOleCmd()
{
IOleCommandTarget * pCmd = NULL;
Hr HRESULT E_FAIL; =
OLECMD ocm {OLECMDID_PRINT, 0} =;
hr = m_lpObject-gt;QueryInterface (IID_IOleCommandTarget, reinterpret_cast < void ** >(&pCmd));
if(FAILED(hr))
¹Ýȯ;
hr = pCmd-> QueryStatus (NULL, 1 & ocm, NULL);
if(SUCCEEDED(hr) & & (ocm.cmdf & OLECMDF_ENABLED))
{
//Command´Â »ç¿ë °¡´É ÇÏ °í È°¼ºÈ ±×·¡¼ ±×°ÍÀ» È£Ãâ ÇÏ´Â °Í
COleVariant vIn;
COleVariant vOut;
hr = pCmd-> Exec (NULL, OLECMDID_PRINT,
OLECMDEXECOPT_DODEFAULT, & Vin°ú vOut);
ASSERT(SUCCEEDED(hr));
}
pCmd-> Release();
}
±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)