¸¶À̱׷¹À̼ǿ¡ °ü·Ã µÈ ÀϹÝÀûÀÎ ¹®Á¦
MFC 2.5¿¡¼ (¹× ³ôÀº) OLE 2 Ŭ·¡½ºÀÇ µðÀÚÀÎ ¸ñÇ¥ Áß Çϳª´Â ¸¹Àº OLE 1.0 Áö¿ø¿¡ ´ë ÇÑ MFC 2.0¿¡¼ Àå¼Ò¿¡ µ¿ÀÏÇÑ ¾ÆÅ°ÅØÃ³¸¦ À¯Áö Çß´Ù. ±× °á°ú, MFC 2.0¿¡¼ °°Àº OLE Ŭ·¡½ºÀÇ ¸¹Àº ¿©ÀüÈ÷ MFC (COleDocument, COleServerDoc, COleClientItem, COleServerItem)ÀÇÀÌ ¹öÀü¿¡ Á¸ÀçÇÕ´Ï´Ù. ¶ÇÇÑ, ÀÌ·¯ÇÑ Å¬·¡½º¿¡¼ Api ¸¹Àº Á¤È®È÷ µ¿ÀÏ ÇÕ´Ï´Ù. ±×·¯³ª, OLE 2 À̹ǷΠOLE 1.0¿¡¼ Å©°Ô ´Ù¸¥ ³»¿ëÀÇ ÀϺΠº¯°æ µÇ¾ú½À´Ï´Ù ±â´ëÇÒ ¼ö ÀÖ½À´Ï´Ù. MFC 2.0Àº Áö¿ø¿¡ Àß ¾Ë°í ÀÖ´Ù¸é, ´ç½ÅÀº Áý¿¡¼ MFCÀÇ 2.0 Áö¿ø ´À³¥ °Å ¾ß¡£
±âÁ¸ MFC/Àº ÀÀ¿ë ÇÁ·Î±×·¥À» º¹¿ë ÇÏ °í OLE 2 ±â´É Ãß°¡,ÀÌ ³ëÆ®¸¦ ¸ÕÀú Àоî¾ß ÇÑ´Ù. ÀÌ ³ëÆ® MFC/OLE 2Àº ±â´ÉÀ» ÀÌ½Ä ÇÏ´Â µ¿¾È ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù ¹× ´ÙÀ½ MFC 2.0¿¡ Æ÷ÇÔ µÈ µÎ °³ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÌ½Ä ÇÏ´Â µ¿¾È ¹ß°ß ÇÏ´Â ¹®Á¦¿¡ ¼³¸í ÇÕ´Ï´Ù ¸î °¡Áö ÀϹÝÀûÀÎ ¹®Á¦¸¦ ´Ù·ì´Ï´Ù: MFC OLE »ùÇà OCLIENT ¹× HIERSVR¡£
MFC ¹®¼/ºä ¾ÆÅ°ÅØÃ³´Â Áß¿ä ÇÑ
ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ MFCÀÇ ¹®¼/ºä ¾ÆÅ°ÅØÃ³¸¦ »ç¿ë ÇÏÁö ¾Ê´Â ÀÀ¿ë ÇÁ·Î±×·¥¿¡ OLE 2 Áö¿øÀ» Ãß°¡ ÇÏ·Á´Â °æ¿ì Áö±Ý ¹®¼/ºä¸¦ À̵¿ ÇÏ´Â ½Ã°£ÀÌÀÔ´Ï´Ù. MFCÀÇ OLE 2 Ŭ·¡½ºÀÇ ÇýÅÃÀÇ ¸¹Àº ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ±âº» ¾ÆÅ°ÅØÃ³ ¹× MFCÀÇ ±¸¼º ¿ä¼Ò¸¦ »ç¿ë ÇÏ´Â ÀÏ´Ü ½ÇÇö¸¸ µË´Ï´Ù.
MFC ¾ÆÅ°ÅØÃ³¸¦ »ç¿ë ÇÏÁö ¾Ê°í ¼¹ö ¶Ç´Â ÄÁÅ×À̳ʸ¦ ±¸Çö ÇÏ´Â ¹æ¹ýÀÌ °¡´É ÇÏÁö¸¸ ±ÇÀå ÇÏÁö ¾ÊÀ½¡£
°í°´´Ô ´ë½Å MFC ±¸Çö »ç¿ë
MFC "ÅëÁ¶¸² ±¸Çö" CToolBar, CStatusBar, CScrollView ¿Í °°Àº Ŭ·¡½º´Â OLE 2 Áö¿ø¿¡ ´ë ÇÑ Æ¯º° ÇÑ °æ¿ì Äڵ带 ³»Àå. µû¶ó¼, ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ ÀÌ·¯ÇÑ Å¬·¡½º¸¦ »ç¿ë ÇÏ´Â °æ¿ì ±×µé OLE ÀÎ½Ä ÇÏ °Ô ±×µé ³Ö¾î ³ë·Â¿¡¼ ll ÀÌÁ¡. ´Ù½Ã ¸»ÇÏÁö¸¸, ÀÌ·¯ÇÑ ¸ñÀûÀ» À§ÇØ "·Ñ-³×-ÀÚ½ÅÀÇ" Ŭ·¡½º´Â ¿©±â °¡´É ÇÏ´Ù ÇÏÁö¸¸ ±ÇÀå ÇÏÁö. MFC ¼Ò½º ÄÚµå (ƯÈ÷¿¡ °üÇØ¼ Ȱ¼ºÈ Àå¼Ò) OLEÀÇ ¹Ì¼¼ÇÑ Á¡ Áß ÀϺθ¦ ´Ù·ç´Â ¿ì¼öÇÑ ÂüÁ¶ÀÔ´Ï´Ù À¯»çÇÑ ±â´ÉÀ» ±¸Çö ÇØ¾ß ÇÏ´Â °æ¿ì¡£
MFC »ùÇà ÄÚµå °Ë»ç
OLE ±â´ÉÀ» Æ÷ÇÔ ÇÏ´Â MFC »ùÇà ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °¢ ´Ù¸¥ °¢µµ¿¡¼ OLE ±¸Çö:
HIERSVR -¼¹ö ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î »ç¿ë Çϱâ À§ÇØ ÁÖ·Î ÀÇ¹Ì ÇÕ´Ï´Ù. ±×°ÍÀº MFC/Àº ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î MFC 2.0¿¡ Æ÷ÇÔ µÈ ¹× MFC/OLE 2·Î ÀÌ½Ä µÇ¾úÀ¸¸ç ´ÙÀ½ OLE 2¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸¹Àº OLE ±â´ÉÀ» ±¸Çö ÇÏ´Â È®Àå¡£
OCLIENT -ÄÁÅ×À̳ÊÀÇ °üÁ¡¿¡¼ ´Ù¾ç ÇÑ OLE ±â´ÉÀ» ÀÔÁõ ÇÏ´Â °ÍÀ» ÀÇ¹Ì ÇÏ´Â µ¶¸³ ½ÇÇàÇü ÄÁÅ×ÀÌ³Ê ÀÀ¿ë ÇÁ·Î±×·¥ÀÔ´Ï´Ù. ±×°ÍÀº ³Ê¹« MFC 2.0¿¡¼ Æ÷ÆÃ Çß´Ù ´ÙÀ½ ´Ù¾ç ÇÑ »ç¿ëÀÚ ÁöÁ¤ Ŭ¸³º¸µå Çü½Ä ¹× Æ÷ÇÔ µÈ Ç׸ñ¿¡ ¸µÅ©¿Í °°Àº ´õ ¸¹Àº °í±Þ OLE ±â´ÉÀ» Áö¿ø Çϵµ·Ï È®Àå ÇÏ´Â °í¡£
DRAWCLI -ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥ OCLIENT ó·³ ±âÁ¸ °³Ã¼ ÁöÇ⠱׸®±â ÇÁ·Î±×·¥ÀÇ Æ² ¾È¿¡¼ ¼öÇà ÇÑ´Ù´Â Á¡À» Á¦¿Ü Çϸé OLE ÄÁÅ×ÀÌ³Ê Áö¿ø ¸¹ÀÌ ±¸Çö ÇÕ´Ï´Ù. OLE ÄÁÅ×ÀÌ³Ê Áö¿øÀ» ±¸Çö ÇÏ °í ±âÁ¸ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ÅëÇÕÇÒ ¼ö ÀÖ½À´Ï´Ù ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.
SUPERPAD -µÇ °í Àß µ¶¸³ ½ÇÇàÇü ÀÀ¿ë ÇÁ·Î±×·¥À» »Ó ¾Æ´Ï¶óÀÌ ÀÀ¿ë ÇÁ·Î±×·¥Àº OLE ¼¹ö À̱⵵ ÇÕ´Ï´Ù. ±×°ÍÀ» ±¸Çö ÇÏ´Â ¼¹ö Áö¿ø ²Ï ÃÖ¼Ò ÀÌ´ÙÀÔ´Ï´Ù. ƯÈ÷ °ü½ÉÀÇ ¹æ¹ý ±×°Í OLE Ŭ¸³º¸µå ¼ºñ½º¸¦ »ç¿ë ÇÏ ¿© µ¥ÀÌÅ͸¦ Ŭ¸³º¸µå¿¡ º¹»ç ÇÏÁö¸¸ Windows¿¡ ³»Àå µÈ ±â´ÉÀ» »ç¿ë ÇÏ ¿© "ÆíÁý" Ŭ¸³º¸µå ºÙ¿©³Ö±â ±â´ÉÀ» ±¸Çö ÇÏ´Â ÄÁÆ®·Ñ. À̰ÍÀº ÀüÅëÀûÀÎ Windows API »ç¿ë »Ó¸¸ ¾Æ´Ï¶ó »õ·Î¿î OLE Api¿ÍÀÇ ÅëÇÕÀÇ Èï¹Ì·Î¿î ¹Í½º¸¦ º¸¿©ÁÝ´Ï´Ù.
»ùÇà ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ë ÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ÇØ´ç MFC »ùÇà "µµ¿ò¸»"À» ÂüÁ¶ ÇϽʽÿÀ.
»ç·Ê ¿¬±¸: OCLIENT MFC 2.0¿¡¼
À§¿¡¼ ¼³¸íÇÑ °Í ó·³ OCLIENT MFC 2.0¿¡ Æ÷ÇÔ µÈ ¹× MFC/OLE1 ÇÔ²² OLE ±¸Çö. ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥Àº óÀ½ º¯È¯ MFC/OLE 2 Ŭ·¡½º¸¦ »ç¿ë ÇÏ´Â ´Ü°è¿¡ ´ë ÇÑ ¼³¸íÀÔ´Ï´Ù. ÃÊ±â Æ÷Æ® MFC/OLE Ŭ·¡½º¸¦ ¼³¸í Çϱâ À§ÇØ ´õ ³ªÀº ¿Ï·á µÈ ÈÄ¿¡ ´Ù¾ç ÇÑ ±â´ÉÀÌ Ãß°¡ µÇ¾ú½À´Ï´Ù. ÀÌ·¯ÇÑ ±â´ÉÀº ¿©±â; Àû¿ë µÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ °í±Þ ±â´É¿¡ ´ë ÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ¿¹Á¦¸¦ ÂüÁ¶ ÇϽʽÿÀ¡£
¸Þ¸ðnbsp;??ÄÄÆÄÀÏ·¯ ¿À·ù ¹× ´Ü°èº° °úÁ¤Àº Visual c + + 2.0À¸·Î ¸¸µé¾îÁ³½À´Ï´Ù. Visual c + + 4.0, ƯÁ¤ ¿À·ù ¸Þ½ÃÁö¿Í À§Ä¡ º¯°æ µÇ¾úÀ» ¼ö ÀÖ½À´Ï´Ù ÇÏÁö¸¸ °³³ä Á¤º¸ À¯È¿ ÇÏ °Ô À¯Áö(&N)¡£
Áö °í ½ÇÇà
OCLIENT »ùÇÃÀ» MFC/OLE Æ÷Æ® ÃÔ¿µ ¹æ¹ýÀº °Ç¹°°ú µÉ »·ÇÑ ÄÄÆÄÀÏ·¯ ¿À·ù¸¦ ¼öÁ¤ ÇÏ ¿© ½ÃÀÛ ÇÕ´Ï´Ù. MFC 2.0¿¡¼ OCLIENT »ùÇÃÀ»°¡Áö°íÀÌ ¹öÀüÀÇ MFC¿¡¼ ÄÄÆÄÀÏ ÇÏ´Â °æ¿ì °Å±â¿¡ ¾ø´Â ¸¹Àº ¿À·ù¸¦ ÇØ°á ÇÏ·Á¸é ãÀ» °Å ¾ß. ¾Æ·¡ ¼ø¼ ´ë·Î ¹ß»ý ÇÏ´Â ¿À·ù¸¦ ¼³¸í Çϴ¡£
ÄÄÆÄÀÏ ¹× ¿À·ù ¼öÁ¤
\oclient\mainview.cpp(104): ¿À·ù C2660: '¹«½ÂºÎ': ÇÔ¼ö 4 ¸Å°³ º¯¼ö¸¦ ¹ÞÁö ¾Ê½À´Ï´Ù
ù ¹øÂ° ¿À·ù COleClientItem::Draw¿ì·Á. MFC/Àº MFC/OLE ¹öÀüÀº º¸´Ù ´õ ¸¹Àº ¸Å°³ º¯¼ö°¡ Çß´Ù. Ãß°¡ ¸Å°³ º¯¼ö°¡ ÇÊ¿ä ÇÏ °í ÀϹÝÀûÀ¸·Î NULL (ÀÌ ¿¹¿¡¼)¿¡¼ ÀÚÁÖ ÇÏÁö Çß´Ù. ÀÌ ¹öÀüÀÇ MFC ÀÚµ¿À¸·Î ¶§¿¡ ±×·ÁÁø µÇ °í CDC ¸ÞŸ ÆÄÀÏ DC´Â Lpwbounds¿¡ ´ë ÇÑ °ªÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, ÀÌÈÄ ÇÁ·¹ÀÓ ¿öÅ© ±¸Ãà "DC"ÀÇ Æ¯¼º¿¡ Àü´Þ ÇÏ´Â Pdc¿¡¼ pFormatDC ¸Å°³ º¯¼ö´Â ÇÊ¿ä ÀÌ»ó. ÀÌ ¹®Á¦¸¦ ÇØ°á ÇÏ·Á¸é ´Ü¼øÈ÷ µÎ Á¦°Å ±×·¡¼ ¿©ºÐÀÇ ±×¸®±â È£Ãâ¿¡ ¸Å°³ º¯¼ö¸¦ NULL¡£
\oclient\mainview.cpp(273): ¿À·ù C2065: 'OLE_MAXNAMESIZE': ¼±¾ð µÇÁö ¾ÊÀº ½Äº°ÀÚ
\oclient\mainview.cpp(273): C2057 ¿À·ù: ¿¹»ó »ó¼ö ½Ä
\oclient\mainview.cpp(280): ¿À·ù C2664: 'CreateLinkFromClipboard': º¯È¯ÇÒ ¼ö ¾ø½À´Ï´Ù ¸Å°³ º¯¼ö 1 'char [1]'¿¡¼ ' enum:: tagOLERENDER '
\oclient\mainview.cpp(286): ¿À·ù C2664: 'CreateFromClipboard': º¯È¯ÇÒ ¼ö ¾ø½À´Ï´Ù ¸Å°³ º¯¼ö 1 'char [1]'¿¡¼ ' enum:: tagOLERENDER '
\oclient\mainview.cpp(288): ¿À·ù C2664: 'CreateStaticFromClipboard': º¯È¯ÇÒ ¼ö ¾ø½À´Ï´Ù ¸Å°³ º¯¼ö 1 'char [1]'¿¡¼ ' enum:: tagOLERENDER '
À§ÀÇ ¿À·ù¸¦ Ç׸ñÀ» ³ªÅ¸³»´Â °íÀ¯ÇÑ À̸§À» Àü´Þ µÉ ÇÊ¿äÇÑ ¸ðµç MFC/Àº COleClientItem::CreateXXXX ±â´É »ç½Ç¿¡¼ ±âÀÎ ÇÕ´Ï´Ù. À̰ÍÀº ±âº» OLE API ¿ä±¸ Çß´Ù. ÀÌ ¶§¹®¿¡ OLE 2 (À̸§À» DDE ´ëÈ¿¡ »ç¿ë µÇ¾ú´Ù) ±âº» Åë½Å ¸ÞÄ¿´ÏÁòÀ¸·Î DDE¸¦ »ç¿ë ÇÏÁö ¾Ê´Â MFC/OLE 2¿¡¼ ÇÊ¿ä ÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°á ÇÏ·Á¸é CreateNewName ÇÔ¼ö¸¦ ´ë ÇÑ »Ó¸¸ ¾Æ´Ï¶ó ¸ðµç ÂüÁ¶¸¦ Á¦°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×°ÍÀº °¢ MFC/OLE ÇÔ¼ö´Â ¿¹»óÀÌ ¹öÀü¿¡¼´Â ´Ü¼øÈ÷ ÀüÈ¿¡ Ä¿¼¸¦ ³õ°í F1 ۸¦ ´©¸£¸é ÇÏ ¿© ½±°Ô¡£
Å©°Ô ´Ù¸¥ ¶Ç ´Ù¸¥ ¿µ¿ªÀº OLE 2 Ŭ¸³º¸µå ó¸®ÀÔ´Ï´Ù. OLE1¿Í Ŭ¸³º¸µå¿Í »óÈ£ ÀÛ¿ë ÇÏ´Â Api´Â Windows Ŭ¸³º¸µå¸¦ »ç¿ë ÇÕ´Ï´Ù. OLE 2ÀÌ ´Ù¸¥ ¸ÞÄ¿´ÏÁòÀ¸·Î ÀÌ·ç¾îÁý´Ï´Ù. MFC/OLE1 Api´Â Ŭ¸³º¸µå COleClientItem °³Ã¼¸¦ Ŭ¸³º¸µå¿¡ º¹»ç Çϱâ Àü¿¡ ¿·Á °¡Á¤ ÇÕ´Ï´Ù. À̰ÍÀº ´õ ÀÌ»ó ÇÊ¿ä ÇÏ °í ¸ðµç MFC/OLE Ŭ¸³º¸µå ÀÛ¾÷ÀÌ ½ÇÆÐ Çϸé. CreateNewName¿¡ ´ë ÇÑ Á¾¼Ó¼ºÀ» Á¦°Å ÇÏ´Â Äڵ带 ÆíÁý ÇÏ´Â µ¿¾È¿¡ Äڵ带 ¿¸®°í ´ÝÈü´Ï´Ù Windows Ŭ¸³º¸µå Á¦°Å ÇØ¾ß¡£
\oclient\mainview.cpp(332): ¿À·ù C2065: 'AfxOleInsertDialog': ¼±¾ð µÇÁö ¾ÊÀº ½Äº°ÀÚ
\oclient\mainview.cpp(332): ¿À·ù C2064: ¿ë¾î´Â ÇÔ¼ö¿¡ °è»ê ÇÏÁö ¾Ê½À´Ï´Ù
\oclient\mainview.cpp(344): C2057 ¿À·ù: ¿¹»ó »ó¼ö ½Ä
\oclient\mainview.cpp(347): ¿À·ù C2039: 'CreateNewObject': 'CRectItem'ÀÇ ±¸¼º¿øÀÌ ¾Æ´Õ´Ï´Ù
CMainView::OnInsertObject 󸮱⿡¼ ÀÌ·¯ÇÑ ¿À·ù°¡ ¹ß»ýÇÕ´Ï´Ù. "»õ °³Ã¼ »ðÀÔ" ¸í·É ó¸® ¿µ¿ªÀÌ ´Ù¸¥ °Í µéÀ» Á¶±Ý º¯°æ µÇ¾ú½À´Ï´Ù. ÀÌ °æ¿ì ´Ü¼øÈ÷ »õ OLE ÄÁÅ×ÀÌ³Ê ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ë ÇÑ ¸¶¹ý»ç°¡ Á¦°ø ÇÏ´Â ¿ø·¡ ±¸Çö º´ÇÕ ½±½À´Ï´Ù. »ç½Ç, À̰ÍÀº ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥ À̽Ŀ¡ Àû¿ëÇÒ ¼ö ÀÖ´Â ±â¼úÀÔ´Ï´Ù. MFC/Àº AfxOleInsertDialog ÇÔ¼ö¸¦ È£Ãâ ÇÏ ¿© "»ðÀÔ °³Ã¼" ´ëÈ »óÀÚ¸¦ Ç¥½Ã ÇÕ´Ï´Ù. ÀÌ ¹öÀü¿¡¼ COleInsertObject dialog °³Ã¼¸¦ ±¸¼º ÇÏ °í DoModalÀ» È£Ãâ ÇÕ´Ï´Ù. ¶ÇÇÑ, »õ OLE Ç׸ñ classname ¹®ÀÚ¿ ´ë½Å CLSID ¸¦ »ç¿ë ÇÏ ¿© ¸¸µé¾îÁý´Ï´Ù. ÃÖÁ¾ °á°úÀÌ °°Àº °ÍÀ» º¸¾Æ¾ß ÇÑ´Ù
COleInsertDialog dlg;
°æ¿ì (dlg.DoModal()! = IDOK)
nbsp;? ¹Ýȯ;
BeginWaitCursor();
CRectItem * pItem = NULL;
½Ãµµ
{
?? / / ¸ÕÀú c + + °³Ã¼¸¦ ¸¸µì´Ï´Ù
?? pItem = GetDocument()-> CreateItem();
?? ASSERT_VALID(pItem);
/ / ´ëÈ µ¥ÀÌÅÍ¿¡¼ Ç׸ñÀ» ÃʱâÈ ÇÕ´Ï´Ù.
?? °æ¿ì (! dlg.CreateItem(pItem))
?????? AfxThrowMemoryException();
????????? / / Á¦¿ÜÇÒ ÇÒ °ÍÀÔ´Ï´Ù
?? ASSERT_VALID(pItem);
??????
?? / / °³Ã¼¸¦ ½ÇÇà ÇÏ´Â °æ¿ì ÀûÀý ÇÑ
?? °æ¿ì (dlg.GetSelectionType() = = COleInsertDialog::createNewItem)
?????? pItem-> DoVerb(OLEIVERB_SHOW, this);
??????
?? / / Áï½Ã ¾÷µ¥ÀÌÆ®
?? pItem-> UpdateLink();
?? pItem-> UpdateItemRectFromServer();
??????
?? / / »õ·Î »ðÀÔµÈ µÈ Ç׸ñÀ» ¼±Åà ¼³Á¤
?? SetSelection(pItem);
?? pItem-> Invalidate();
}
CATCH (CException, e)
{/ / Ç׸ñ Á¤¸®
?? °æ¿ì (pItem! = NULL)
?????? GetDocument()-> DeleteItem(pItem);
??????????
?? AfxMessageBox(IDP_FAILED_TO_CREATE);
}
END_CATCH
??
EndWaitCursor()
¸Þ¸ðnbsp;??»ðÀÔ »õ °³Ã¼´Â ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ë ÇÑ ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù)(&N):
±×°ÍÀº ¶ÇÇÑ lt;afxodlgs.h¸¦ Æ÷ÇÔ ÇÏ´Â µ¥ ÇÊ¿äÇÑ > COleInsertObject ´ëÈ »óÀÚ Å¬·¡½º »Ó ¾Æ´Ï¶ó MFC Á¦°øÇÑ ´Ù¸¥ Ç¥ÁØ ´ëÈ »óÀÚ¿¡ ´ë ÇÑ ¼±¾ðÀ» Æ÷ÇÔ Çϴ¡£
\oclient\mainview.cpp(367): ¿À·ù C2065: 'OLEVERB_PRIMARY': ¼±¾ð µÇÁö ¾ÊÀº ½Äº°ÀÚ
\oclient\mainview.cpp(367): ¿À·ù C2660: 'DoVerb': ÇÔ¼ö 1 ¸Å°³ º¯¼ö¸¦ ¹ÞÁö ¾Ê½À´Ï´Ù
°³³äÀº µ¿ÀÏ ÇÏ´õ¶óµµ ÀÌ·¯ÇÑ ¿À·ù OLE 2¿¡¼ ÀϺΠOLE1 »ó¼ö º¯°æ »ç½Ç¿¡ ±âÀÎÇÑ ´Ù. ÀÌ °æ¿ì OLEVERB_PRIMARY ´Â OLEIVERB_PRIMARY·Î º¯°æ µÇ¾ú½À´Ï´Ù. OLE1 ¹× OLE 2¿¡¼ ±âº» µ¿»ç´Â ÀϹÝÀûÀ¸·Î ½ÇÇà ÄÁÅ×À̳ʿ¡ ÀÇÇØ Ç׸ñ¿¡ Ŭ¸¯ÇÒ ¶§¡£
DoVerb ¿©ºÐÀÇ ¸Å°³ º¯¼ö¸¦ »ç¿ë ÇÏ´Â À̿ܿ¡ ÀÌÁ¦ ? º¸±â¿¡ ´ë ÇÑ Æ÷ÀÎÅÍ (CView*). ÀÌ ¸Å°³ º¯¼ö´Â¸¸ "ºñÁÖ¾ó ÆíÁý" (¶Ç´Â ÇöÀç À§Ä¡¿¡¼ Ȱ¼ºÈ)¸¦ ±¸Çö ÇÏ´Â µ¥ »ç¿ë µË´Ï´Ù. ÀÌÁ¦ ´ç½ÅÀº ¸Å°³ º¯¼ö¸¦ NULL·Î ¼³Á¤ ¶§¹®¿¡ÀÌ ½ÃÁ¡¿¡¼ÀÌ ±â´ÉÀ» ±¸Çö ÇÏÁö´Â¡£
ÇÁ·¹ÀÓ ¿öÅ©¸¦ °áÄÚ ½Ãµµ-Àå¼Ò¸¦ Ȱ¼ºÈ ÇÏ´Â ÀÖ´ÂÁö È®ÀÎ ÇÏ·Á¸é, ´ç½ÅÀº ´ÙÀ½°ú °°Àº COleClientItem::CanActivate À» ÀçÁ¤ÀÇ ÇØ¾ß
BOOL CRectItem::CanActivate()
{
nbsp;? FALSE; ¹Ýȯ
}
\oclient\rectitem.cpp(53): ¿À·ù C2065: 'GetBounds': ¼±¾ð µÇÁö ¾ÊÀº ½Äº°ÀÚ
\oclient\rectitem.cpp(53): ¿À·ù C2064: ¿ë¾î´Â ÇÔ¼ö¿¡ °è»ê ÇÏÁö ¾Ê½À´Ï´Ù
\oclient\rectitem.cpp(84): ¿À·ù C2065: 'SetBounds': ¼±¾ð µÇÁö ¾ÊÀº ½Äº°ÀÚ
\oclient\rectitem.cpp(84): ¿À·ù C2064: ¿ë¾î´Â ÇÔ¼ö¿¡ °è»ê ÇÏÁö ¾Ê½À´Ï´Ù(&N)
MFC/Àº COleClientItem::GetBounds ¹× SetBounds Äõ¸®Çϰí ( ¿ÞÂÊ ¹× À§ÂÊ ±¸¼º¿øÀº Ç×»ó 0) Ç׸ñÀÇ ¹üÀ§¸¦ Á¶ÀÛ ÇÏ´Â µ¥ »ç¿ë Çß´Ù. COleClientItem::GetExtent ¹× SetExtent, Å©±â ¶Ç´Â CSize ´ë½Å °Å·¡ Áö¿ø ´õ Á÷Á¢ÀûÀÌ MFC/OLE 2¡£
»õ·Î¿î Setitemrecttoserver¿¡ ´ë ÇÑ ÄÚµå ¹× UpdateItemRectFromServer È£ÃâÀÌ Ã³·³ º¸ÀÌ´Â:
BOOL CRectItem::UpdateItemRectFromServer()
{
nbsp; ASSERT(m_bTrackServerSize);
? CSize Å©±â;
? if (!.GetExtent(&size))
???? FALSE; ¹Ýȯ??? / ºó /
/ / ȸé ÁÂÇ¥¿¡¼ HIMETRIC Áöµµ
? {
???? CClientDC screenDC(NULL);
???? screenDC.SetMapMode(MM_HIMETRIC);
???? screenDC.LPtoDP(&size);
? }
? / / ±×³É Ç׸ñ Å©±â ¼³Á¤
? °æ¿ì (m_rect.Size()! = Å©±â)
? {
???? / / Å©±â/À§Ä¡¸¦ ¹«È¿È
???? Invalidate();
???? m_rect.right = m_rect.left + size.cx;
???? m_rect.bottom = m_rect.top + size.cy;
???? / / »Ó »õ·Î¿î Å©±â/À§Ä¡
???? Invalidate();
? }
? TRUE¸¦ ¹Ýȯ ÇÕ´Ï´Ù.
}
BOOL CRectItem::SetItemRectToServer()
{
? / / Æ÷ÇÔµÈ µÈ Ç׸ñ¿¡ ´ë ÇÑ °ø½Ä ¹üÀ§ ¼³Á¤
? CSize Å©±â m_rect =.Size();
? {
???? CClientDC screenDC(NULL);
???? screenDC.SetMapMode(MM_HIMETRIC);
???? screenDC.DPtoLP(&size);
? }
? ½Ãµµ
? {
???? SetExtent(size);? / ´ë±â ÇÒ ¼ö ÀÖ½À´Ï´Ù
? }
? CATCH (CException, e)
? {
???? FALSE; ¹Ýȯ? / / ¸µÅ© Setbounds¸¦ Çã¿ë ÇÏÁö °ÍÀÔ´Ï´Ù
? }
? END_CATCH
? TRUE¸¦ ¹Ýȯ ÇÕ´Ï´Ù.
}
\oclient\frame.cpp(50): ¿À·ù C2039: 'InWaitForRelease': 'COleClientItem'ÀÇ ±¸¼º¿øÀÌ ¾Æ´Õ´Ï´Ù
\oclient\frame.cpp(50): ¿À·ù C2065: 'InWaitForRelease': ¼±¾ð µÇÁö ¾ÊÀº ½Äº°ÀÚ
\oclient\frame.cpp(50): ¿À·ù C2064: ¿ë¾î´Â ÇÔ¼ö¿¡ °è»ê ÇÏÁö ¾Ê½À´Ï´Ù
º»ÁúÀûÀ¸·Î ´ëºÎºÐÀÇ °æ¿ì¿¡¼ ºñµ¿±â À̾ú±â MFC/Àº ÄÁÅ×À̳ÊÀÇ µ¿±â½Ä API È£Ãâ ¼¹ö¿¡ ½Ã¹Ä·¹À̼ÇÀ» Çß´Ù. ±×°ÍÀº »ç¿ëÀÚ ·ÎºÎÅÍ ¸í·ÉÀ» ó¸® Çϱâ Àü¿¡ ÁøÇà ÁßÀÎ ¶Ù¾î³ ºñµ¿±â È£Ãâ¿¡ ´ë ÇÑ È®ÀÎ ÇÏ´Â µ¥ ÇÊ¿äÇÑ Çß´Ù. MFC/Àº ÀÌ·¸°Ô COleClientItem::InWaitForRelease ÇÔ¼ö¸¦ Á¦°ø ÇÕ´Ï´Ù. MFC/OLE 2ÀÌ ÇÊ¿ä ÇÏÁö ¾Ê½À´Ï´Ù, ±×·¡¼ Cmainframe¿¡ OnCommand ÀçÁ¤ÀÇ ¸ðµÎ ÇÔ²² Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù.
OCLIENT´Â ÄÄÆÄÀÏÇÏ°í ¸µÅ© ÇÏ´Â ½ÃÁ¡¿¡¼¡£
±âŸ ÇÊ¿äÇÑ »çÇ×
±×·¯³ª ¸î °¡Áö°¡ ´Ù ÇÏÁö ¾Ê½À´Ï´Ù ½ÇÇà, OCLIENT °è¼Ó µË´Ï´Ù. ³ªÁß¿¡ ´ë½ÅÀÇ ÀÌÁ¦ ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°á ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.
¸ðµÎÀÇ 1 ¹øÂ° ±×°ÍÀº OLE ¶óÀ̺귯¸®¸¦ ÃʱâÈ ÇÏ´Â µ¥ ÇÊ¿äÇÑÀÔ´Ï´Ù. InitInstance ¿¡¼ AfxOleInit ¸¦ È£Ãâ ÇÏ ¿© ÀÌ·¸°Ô:
if (!.AfxOleInit())
{
AfxMessageBox ("½ÇÆÐ¸¦ OLE ¶óÀ̺귯¸®¸¦ ÃʱâÈ");
FALSE; ¹Ýȯ
}
¶ÇÇÑ ¸Å°³ º¯¼ö ¸ñ·Ï º¯°æ ³»¿ë¿¡ ´ë ÇÑ °¡»ó ÇÔ¼ö¸¦ È®ÀÎ ÇÏ´Â ÁÁÀº ¾ÆÀ̵ð¾î ÀÌ´Ù. Çϳª °°Àº ±â´ÉÀº COleClientItem::OnChange, ¸ðµç MFC/OLE ÄÁÅ×ÀÌ³Ê ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ ÀçÁ¤ÀÇ ÇÕ´Ï´Ù. ¿Â¶óÀÎ µµ¿ò¸»À» º¸°í, Ãß°¡ 'DWORD dwParam' Ãß°¡ µÇ¾ú½À´Ï´Ù º¸ÀÚ. »õ·Î¿î CRectItem::OnChange ´ÙÀ½°ú °°½À´Ï´Ù.
void CRectItem::OnChange (OLE_NOTIFICATION wNotification, DWORD dwParam)
{
°æ¿ì (m_bTrackServerSize amp; ¹×
?????? !UpdateItemRectFromServer())
{
?? / / ºó °³Ã¼
?? °æ¿ì (wNotification = OLE_CLOSED)
?? {
???? / / °³Ã¼-¿¡ ´ë ÇÑ ¼ö½Å µ¥ÀÌÅͰ¡ ±×°ÍÀ» ÆÄ±«
???? ÁÖÀå (!.IsVisible());
???? GetDocument()-> DeleteItem(this);
???? ¹Ýȯ;?? / / ¾Æ¹« ¾÷µ¥ÀÌÆ® (Ç׸ñÀº »ç¶óÁö°í Áö±ÝÀº)
?? }
}
°æ¿ì (wNotification! = OLE_CLOSED)
???? Dirty();
Invalidate();? / / ¾î¶² º¯È¸¦ ´Ù½Ã ±×¸®±â ¹ß»ý
}
MFC/Àº ÄÁÅ×ÀÌ³Ê ÀÀ¿ë ÇÁ·Î±×·¥ COleClientDoc¿¡¼ ¹®¼ Ŭ·¡½º¸¦ ÆÄ»ý ÇÕ´Ï´Ù. MFC/OLE 2¿¡¼ÀÌ Å¬·¡½º Á¦°Å µÇ¾úÀ¸¸ç COleDocument (ÀÌ »õ·Î¿î Á¶Á÷À» ½±°Ô ÄÁÅ×À̳Ê/¼¹ö ÀÀ¿ë ÇÁ·Î±×·¥)À¸·Î ´ëü ÇÕ´Ï´Ù. °Å±â¿¡´Â # define COleClientDoc COleDocument MFC/OLE 2 OCLIENT °°Àº MFC/Àº ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÀÌ½Ä ´Ü¼øÈ ÇÏ¿¡ ¸ÅÇÎÇÏ´Â. COleDocument COleClientDoc ¿¡ ÀÇÇØ Á¦°ø µÈ Á¦°ø ÇÏÁö ±â´É Áß Çϳª´Â Ç¥ÁØ ¸í·É ¸Þ½ÃÁö ¸Ê Ç׸ñÀÔ´Ï´Ù. ÀÌ ¶ÇÇÑ ÇÏÁö COleDocument (Á÷Á¢)¸¦ »ç¿ë ÇÏ´Â ¼¹ö ÀÀ¿ë ÇÁ·Î±×·¥ ¼öÇà ÇÏÁö ¾Ê½À´Ï´Ù ±×µé°ú ÇÔ²² ÀÌ·¯ÇÑ ¸í·É 󸮱âÀÇ ¿À¹ö Çìµå°¡ ¹ß»ý ÇÏÁö ¾Ê´Â ÇÑ ±×µéÀº ÄÁÅ×À̳Ê/¼¹ö ÀÀ¿ë ÇÁ·Î±×·¥Àº ÀÌ·ç¾îÁý´Ï´Ù. CMainDoc ¸Þ½ÃÁö ¸Ê¿¡ ´ÙÀ½ Ç׸ñÀ» Ãß°¡ ÇØ¾ß ÇÏ´Â µî:
ON_UPDATE_COMMAND_UI (ID_EDIT_PASTE, OnUpdatePasteMenu)
ON_UPDATE_COMMAND_UI (ID_EDIT_PASTE_LINK, OnUpdatePasteLinkMenu)
ON_UPDATE_COMMAND_UI (ID_OLE_EDIT_LINKS, OnUpdateEditLinksMenu)
ON_COMMAND (ID_OLE_EDIT_LINKS, COleDocument::OnEditLinks)
ON_UPDATE_COMMAND_UI (ID_OLE_VERB_FIRST, OnUpdateObjectVerbMenu)
ON_UPDATE_COMMAND_UI (ID_OLE_EDIT_CONVERT, OnUpdateObjectVerbMenu)
ON_COMMAND (ID_OLE_EDIT_CONVERT, OnEditConvert)
ÀÌ·¯ÇÑ ¸í·ÉÀÇ ¸ðµç ±¸ÇöÀÔ´Ï´Ù ±ÍÇÏÀÇ ¹®¼¿¡ ´ë ÇÑ ±âº» Ŭ·¡½º COleDocument, ÀΡ£
ÀÌ ½ÃÁ¡¿¡¼, OCLIENT ±â´É OLE ÄÁÅ×ÀÌ³Ê ÀÀ¿ë ÇÁ·Î±×·¥ÀÔ´Ï´Ù. (OLE1 ¶Ç´Â OLE 2) ¾î¶² Á¾·ùÀÇ Ç׸ñÀ» »ðÀÔ ÇÏ´Â °ÍÀÌ ºÒ°¡´É ÇÕ´Ï´Ù. ÇöÀç À§Ä¡¿¡¼ Ȱ¼ºÈ¸¦ »ç¿ë ÇÏ´Â µ¥ ÇÊ¿äÇÑ Äڵ带 ±¸Çö ÇÏ´Â ÀÌÈÄ Ç׸ñÀÌ ¸¹ÀÌ ole1¿Í °°Àº º°µµ â¿¡¼ ÆíÁý µË´Ï´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼´Â Á¦ÀÚ¸®¿¡¼ ÆíÁý ("ºñÁÖ¾ó ÆíÁý"ÀÌ ¶ó°íµµ ÇÔ) ¼ö ÀÖµµ·Ï ÇÊ¿äÇÑ »çÇ×À» ¼³¸í ÇÕ´Ï´Ù.
"ºñÁÖ¾ó ÆíÁý" Ãß°¡
OLEÀÇ °¡Àå Èï¹Ì·Î¿î ±â´É Áß Çϳª´Â Àå¼Ò¿¡ Ȱ¼ºÈ (¶Ç´Â "ºñÁÖ¾ó ÆíÁý")ÀÔ´Ï´Ù. ÀÌ ±â´ÉÀº ¼¹ö ÀÀ¿ë ÇÁ·Î±×·¥À» ÀϺΠÄÁÅ×À̳ÊÀÇ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ »ç¿ëÀÚ¿¡ ´ë ÇÑ º¸´Ù ¿øÈ°ÇÑ ÆíÁý ÀÎÅÍÆäÀ̽º¸¦ Á¦°ø ÇÕ´Ï´Ù. OCLIENT ÇöÀç À§Ä¡¿¡¼ Ȱ¼ºÈ¸¦ ±¸Çö ÇÏ·Á¸é ¸î °¡Áö Ưº° ÇÑ ¸®¼Ò½º »Ó¸¸ ¾Æ´Ï¶ó, ¸î °¡Áö Ãß°¡ ÄÚµå Ãß°¡ ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸®¼Ò½º¿Í ÄÚµå´Â ÀϹÝÀûÀ¸·Î AppWizard Á¦°øÇÑ-»ç½Ç, ¸¹Àº ¿©±â¿¡ ÄÚµåÀÇ "ÄÁÅ×À̳Ê" Áö¿ø ½Å¼±ÇÑ AppWizard ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ Á÷Á¢ ºô¸° Çß´Ù¡£
ù°·Î ¸ðµÎÀÇ ±×°ÍÀº ³»ºÎ Ȱ¼º Ç׸ñ ¶§ »ç¿ëÇÒ ¸Þ´º ¸®¼Ò½º¸¦ Ãß°¡ ÇÏ´Â µ¥ ÇÊ¿äÇÑ. IDR_OCLITYPE ¸®¼Ò½º¸¦ º¹»ç ÇÏ °í ÆÄÀÏ ¹× â ÆË¾÷À» Á¦¿ÜÇÑ ¸ðµç Á¦°Å ÇÏ ¿© Visual c + +¿¡¼ÀÌ Ãß°¡ ¸Þ´º ¸®¼Ò½º¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ±×·ì ºÐ¸®¸¦ ³ªÅ¸³»´Â ÆÄÀÏ ¹× â ÆË¾÷ »çÀÌ µÎ ±¸ºÐ¼± »ðÀÔ µË´Ï´Ù (ó·³ º¸ÀÌ°Ô ÇÑ´Ù: ÆÄÀÏ | â)ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ±¸ºÐÀº ¹«¾ùÀ» ÀÇ¹Ì ÇÏ °í ¼¹ö ¹× ÄÁÅ×ÀÌ³Ê ¸Þ´º º´ÇÕ ¹æ¹ý¿¡ ´ë ÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº "¸Þ´º ¹× ¸®¼Ò½º: ¸Þ´º º´ÇÕ" OLE 2 ¼ö¾÷¿¡¼ À» ÂüÁ¶ ÇϽʽÿÀ.
ÀÌ ¸Þ´º¸¦ »ý¼º ÇÏ °í ³ª¸é ÇÁ·¹ÀÓ ¿öÅ© ±×µé¿¡ ´ëÇØ ¾Ë°í ÀÖµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¹®¼ ¼½Ä ÆÄÀÏ¿¡ ´ë ÇÑ ±ÍÇÏÀÇ Initinstance¿¡¼ ¹®¼ ¼½Ä ÆÄÀÏ ¸ñ·Ï¿¡ Ãß°¡ Çϱâ Àü¿¡ CDocTemplate::SetContainerInfo ¸¦ È£Ãâ ÇÏ ¿© ÀÌ·ç¾îÁý´Ï´Ù. ¹®¼ ¼½Ä ÆÄÀÏÀ» µî·Ï ÇÏ´Â »õ·Î¿î ÄÚµå ´ÙÀ½°ú °°ÀÌ
CDocTemplate * pTemplate »õ·Î¿î CMultiDocTemplate (=
nbsp;? IDR_OLECLITYPE,
?? RUNTIME_CLASS(CMainDoc),
?? RUNTIME_CLASS(CMDIChildWnd) / / Ç¥ÁØ MDI ÀÚ½Ä ÇÁ·¹ÀÓ
?? RUNTIME_CLASS(CMainView));
pTemplate-> SetContainerInfo(IDR_OLECLITYPE_INPLACE);
AddDocTemplate(pTemplate)
IDR_OLECLITYPE_INPLACE ¸®¼Ò½º´Â Visual c + +¿¡¼ ¸¸µç Ưº° ÇÑ Àå¼Ò¿¡¼ ¸®¼Ò½º¡£
ÇöÀç À§Ä¡¿¡¼ Ȱ¼ºÈ¸¦ »ç¿ë Çϱâ À§Çؼ´Â ¸î °¡Áö ¸ðµÎ CView ¿¡¼ º¯°æ ÇØ¾ß ÇÏ´Â (CMainView) ÆÄ»ý Ŭ·¡½º¿Í COleClientItem ÆÄ»ý Ŭ·¡½º (CRectItem). Appwizard¿¡¼ Á¦°ø ÇÏ´Â ¸ðµç ÀÌ·¯ÇÑ ÀçÁ¤ÀÇ ÇÏ °í ±¸Çö ´ëºÎºÐ ±âº» AppWizard ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ Á÷Á¢ ¿Ã °Í ÀÌ´Ù¡£
ÀÌ Æ÷Æ®ÀÇ Ã¹ ¹øÂ° ´Ü°è¿¡¼ ÇöÀç À§Ä¡¿¡¼ Ȱ¼ºÈ´Â ÀüÀûÀ¸·Î COleClientItem::CanActivate¸¦ ÀçÁ¤ÀÇ ÇÏ ¿© »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ ÀçÁ¤ÀÇ À§Ä¡¿¡¼ Ȱ¼ºÈ¸¦ Çã¿ë Çϵµ·Ï Á¦°Å µÇ¾î¾ß ÇÑ´Ù. ¶ÇÇÑ, º¸±â´Â À§Ä¡¿¡¼ Ȱ¼ºÈ ÇÏ´Â µ¥ ÇÊ¿äÇѸ¸ Á¦°ø Çϱ⠶§¹®¿¡ NULL DoVerb (µÎ °¡Áö ±×µéÀÇ) ¸ðµç È£Ãâ¿¡ Àü´Þ µÇ¾ú½À´Ï´Ù. ÇöÀç À§Ä¡¿¡¼ Ȱ¼ºÈ¸¦ ¿Ïº® ÇÏ °Ô ±¸Çö ÇÏ·Á¸é ¿Ã¹Ù¸¥ º¸±â DoVerb È£Ãâ¿¡ Àü´Þ ÇÏ´Â µ¥ ÇÊ¿äÇÑÀÔ´Ï´Ù. ÀÌ·¯ÇÑ È£Ãâ Áß Çϳª´Â CMainView::OnInsertObject ¿¡
pItem-gt; DoVerb(OLEIVERB_SHOW, this)(&G)
´Ù¸¥ CMainView::OnLButtonDblClk ¿¡
m_pSelection-gt; DoVerb(OLEIVERB_PRIMARY, this)(&G)
±×°ÍÀº COleClientItem::OnGetItemPosition¸¦ ÀçÁ¤ÀÇ ÇÏ´Â µ¥ ÇÊ¿äÇÑÀÔ´Ï´Ù. ÀÌ ¼¹ö À§Ä¡ Ç׸ñÀÌ ³»ºÎ¿¡¼ Ȱ¼ºÈ ÇÏ´Â °æ¿ì ÄÁÅ×À̳ÊÀÇ Ã¢À» ±âÁØÀ¸·Î À©µµ¿ì¸¦ ¾Ë·ÁÁÝ´Ï´Ù. OCLIENT¿¡ ´ë ÇÑ ±¸ÇöÀº »ç¼ÒÇÑ
void CRectItem::OnGetItemPosition (CRectamp; rPosition)
{
?? rPosition = m_rect;
}(&A)
¹«½¼ "¿¡¼-Àå¼Ò Å©±â Á¶Á¤." ¶ó°í ´ëºÎºÐÀÇ ¼¹ö ±¸Çö ÀÌ Å©±â¸¦ »ç¿ëÀÚ°¡ Ç׸ñÀ» ÆíÁý ÇÏ´Â µ¿¾È À̵¿ ¼¹ö âÀÌ ÀÖ½À´Ï´Ù. ÄÁÅ×ÀÌ³Ê À̵¿ ¶Ç´Â ÀϹÝÀûÀ¸·Î â Å©±â Á¶Á¤ À§Ä¡¿Í ÄÁÅ×ÀÌ³Ê ¹®¼ ÀÚü ³»¿¡¼ Å©±â¸¦ ¿µÇâÀ» ÁֹǷÎÀÌ ÀÛ¾÷¿¡ Âü¿© ÇØ¾ß ÇÕ´Ï´Ù. OCLIENTÀÇ ±¸ÇöÀ» µ¿±âÈ »õ À§Ä¡¿Í Å©±â´Â m_rect¿¡ ÀÇÇØ À¯Áö ÇÏ´Â ³»ºÎ Á÷»ç°¢Çü¡£
BOOL CRectItem::OnChangeItemPosition(const CRectamp; rectPos)
{
?? ASSERT_VALID(this);
if (!.COleClientItem::OnChangeItemPosition(rectPos))
?????? FALSE; ¹Ýȯ
Invalidate();
?? m_rect = rectPos;
?? Invalidate();
?? GetDocument()-> SetModifiedFlag();
TRUE¸¦ ¹Ýȯ ÇÕ´Ï´Ù.
}
ÀÌ ½ÃÁ¡¿¡¼, Á¦ÀÚ¸®¿¡¼ Ȱ¼ºÈ µÉ ¶§ Ȱ¼º Ç׸ñ À̵¿ ¹× Å©±â Á¶Á¤ ó¸® ÇÑ Ç׸ñ ¼ö ÀÖµµ·Ï ÃæºÐ ÇÑ ÄÚµå ÇÏÁö¸¸ ÆíÁý ¼¼¼ÇÀ» Á¾·áÇÒ ¼ö ÀÖµµ·Ï Äڵ尡 ¹ß»ý ÇÏÁö ¾Ê½À´Ï´Ù. ÀϺΠ¼¹öÀÌ ±â´ÉÀ» Á¦°øÀÌ ½º½º·Î esc ۸¦ ó¸® ÇÏ ¿©, ºñ·Ï ÄÁÅ×ÀÌ³Ê Ç׸ñÀ» ºñȰ¼ºÈ ÇÏ·Á¸é µÎ °¡Áö ¹æ¹ýÀ¸·Î Á¦°ø ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù: Ç׸ñ, ¹ÛÀ¸·Î Ŭ¸¯ ÇÏ ¿© (1) ¹× (2) esc ۸¦ ħ À¸·Î½á¡£
Å»Ãâ¿¡ ´ë ÇÑ Å° Ãß°¡ VK_ESCAPE ۸¦ ¸í·É¿¡ ¸ÅÇÎÇÏ´Â Visual c + + °¡¼Ó±â ID_CANCEL_EDIT¿¡ Ãß°¡ µË´Ï´Ù ÀÚ¿ø. ÀÌ ¸í·É¿¡ ´ë ÇÑ Ã³¸®±â´Â ´ÙÀ½°ú °°½À´Ï´Ù.:
/ / ´ÙÀ½ ¸í·É 󸮱â´Â Ç¥ÁØ Á¦°ø
/ / Űº¸µå Á¦ÀÚ¸®¿¡¼ Ãë¼Ò ÇÏ·Á¸é »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º
/ / session.void CMainView::OnCancelEdit() ÆíÁý
{
nbsp;? / /ÀÌ º¸±â¿¡ ³»ºÎ Ȱ¼º Ç׸ñÀ» ´Ý½À´Ï´Ù.
?? COleClientItem * pActiveItem = GetDocument()-> GetInPlaceActiveItem(this);
?? °æ¿ì (pActiveItem! = NULL)
?????? pActiveItem-> close ();
?? ASSERT(GetDocument()-> GetInPlaceActiveItem(this) = = NULL);
}
¾îµð »ç¿ëÀÚ Ç׸ñ ¹Ù±ùÂÊÀ» Ŭ¸¯ÇÒ °æ¿ì¸¦ ó¸® ÇÏ·Á¸é ´ÙÀ½ Äڵ忡 Ãß°¡ÇÑ CMainView::SetSelection ÀÇ ½ÃÀÛ
°æ¿ì (pNewSel! = m_pSelection | pNewSel = = NULL)
{
nbsp;? COleClientItem * pActiveItem = GetDocument()-> GetInPlaceActiveItem(this);
?? °æ¿ì (pActiveItem! = NULL & & pActiveItem! = pNewSel)
?????? pActiveItem-> close ();
}
?& nbsp
Ç׸ñ Àå¼Ò¿¡¼ Ȱ¼º ¶§ Æ÷Ä¿½º°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ÀÌ °æ¿ì È®ÀÎ ÇÏ´Â Æ÷Ä¿½º´Â Ç×»ó Ȱ¼º Ç׸ñ¿¡ ¿Å°ÜÁø º¸±â Æ÷Ä¿½º¸¦ ¹ÞÀ» ¶§ OnSetFocus ó¸®:
/ / OnSetFocus ¹× Onsize¿¡ ´ë ÇÑ Æ¯¼ö ó¸® ÇÊ¿ä / ¶§ °³Ã¼°¡ Á¦ÀÚ¸®¿¡¼ ÆíÁý ÇÏ °í /.
void CMainView::OnSetFocus (CWnd * pOldWnd)
{
nbsp;? COleClientItem * pActiveItem = GetDocument()-> GetInPlaceActiveItem(this);
?? °æ¿ì (pActiveItem! = NULL & &
?? pActiveItem-> GetItemState() = COleClientItem::activeUIState)
?? {
?????? / / ÇÊ¿äÇÑ °æ¿ì µ¿ÀÏÇÑ º¸±â°¡ÀÌ Ç׸ñ¿¡ Æ÷Ä¿½º¸¦ ¼³Á¤ ÇÏ·Á¸é
?????? CWnd * pWnd = pActiveItem-> GetInPlaceWindow();
?????? °æ¿ì (pWnd! = NULL)
?????? {
?????????? pWnd-> SetFocus();? / / ±âº» Ŭ·¡½º¸¦ È£Ãâ ÇÏÁö ¸¶½Ê½Ã¿À
?????????? ¹Ýȯ;
?????? }
?? }
CView::OnSetFocus(pOldWnd);
}
º¸±â Å©±â¸¦ Á¶Á¤ÇÒ ¶§ Ŭ¸®ÇÎ »ç°¢Çü º¯°æ µÈ Ȱ¼º Ç׸ñÀ» Å뺸 ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô OnSize ¿¡ ´ë ÇÑ Ã³¸®±â¸¦ Á¦°ø ÇÏ·Á¸é:
void CMainView::OnSize (UINT nType, int cx int cy)
{
nbsp;? CView::OnSize (nType, cx, cy);
?? COleClientItem * pActiveItem = GetDocument()-> GetInPlaceActiveItem(this);
?? °æ¿ì (pActiveItem! = NULL)
?????? pActiveItem-> SetItemRects();
}
»ç·Ê ¿¬±¸: HIERSVR MFC 2.0¿¡¼
HIERSVR µµ MFC 2.0¿¡ Æ÷ÇÔ µÈ ¹× MFC/OLE1 ÇÔ²² OLE ±¸Çö. ÀÌ ³ëÆ®´ÂÀÌ ÀÀ¿ë ÇÁ·Î±×·¥Àº óÀ½ º¯È¯ MFC/OLE 2 Ŭ·¡½º¸¦ »ç¿ë ÇÏ´Â ´Ü°è¸¦ °£·«ÇÏ°Ô ¼³¸í ÇÕ´Ï´Ù. ÃÊ±â Æ÷Æ® MFC/OLE 2 Ŭ·¡½º¸¦ ¼³¸í Çϱâ À§ÇØ ´õ ³ªÀº ¿Ï·á µÈ ÈÄ¿¡ ´Ù¾ç ÇÑ ±â´ÉÀÌ Ãß°¡ µÇ¾ú½À´Ï´Ù. ÀÌ·¯ÇÑ ±â´ÉÀº ¿©±â; Àû¿ë µÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ °í±Þ ±â´É¿¡ ´ë ÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ¿¹Á¦¸¦ ÂüÁ¶ ÇϽʽÿÀ¡£
¸Þ¸ðnbsp;??ÄÄÆÄÀÏ·¯ ¿À·ù ¹× ´Ü°èº° °úÁ¤Àº Visual c + + 2.0À¸·Î ¸¸µé¾îÁ³½À´Ï´Ù. Visual c + + 4.0, ƯÁ¤ ¿À·ù ¸Þ½ÃÁö¿Í À§Ä¡ º¯°æ µÇ¾úÀ» ¼ö ÀÖ½À´Ï´Ù ÇÏÁö¸¸ °³³ä Á¤º¸ À¯È¿ ÇÏ °Ô À¯Áö(&N)¡£
Áö °í ½ÇÇà
HIERSVR »ùÇÃÀ» MFC/OLE Æ÷Æ® ÃÔ¿µ ¹æ¹ýÀº °Ç¹°°ú µÉ »·ÇÑ ÄÄÆÄÀÏ·¯ ¿À·ù¸¦ ¼öÁ¤ ÇÏ ¿© ½ÃÀÛ ÇÕ´Ï´Ù. MFC 2.0¿¡¼ HIERSVR »ùÇÃÀ»°¡Áö°íÀÌ ¹öÀüÀÇ MFC¿¡¼ ÄÄÆÄÀÏ ÇÏ´Â °æ¿ì´Â ¾ø½À´Ï´Ù (ºñ·Ï OCLIENT »ùÇÃÀ» º¸´Ù ´õ ÀÖ´Ù)¸¦ ÇØ°á Çϱâ À§ÇØ ¸¹Àº ¿À·ù¸¦ ãÀ» °Å ¾ß. ¾Æ·¡´Â ÀϹÝÀûÀ¸·Î ¹ß»ý ÇÏ´Â ¼ø¼¿¡ ÀÖ´Â ¿À·ù¸¦ ¼³¸í Çϴ¡£
ÄÄÆÄÀÏ ¹× ¿À·ù ¼öÁ¤
\hiersvr\hiersvr.cpp(83): ¿À·ù C2039: 'RunEmbedded': 'COleTemplateServer'ÀÇ ±¸¼º¿øÀÌ ¾Æ´Õ´Ï´Ù
ÀÌ Ã¹ ¹øÂ° ¿À·ù´Â ¼¹ö¿¡ ´ë ÇÑ ÈξÀ ´õ Å« ¹®Á¦°¡ InitInstance ÇÔ¼ö¸¦ ÁöÀû ÇÑ´Ù. OLE ¼¹ö¿¡ ÇÊ¿äÇÑ ÃʱâÈ ¾Æ¸¶ MFC/Àº ÀÀ¿ë ÇÁ·Î±×·¥ ½ÇÇàÀ» ÇÏ °Ô ÇÒ °Í ÀÌ´Ù °¡Àå Å« º¯È Áß ÇϳªÀÔ´Ï´Ù. ÇÒ °¡Àå ÁÁÀº °ÍÀº AppWizard OLE ¼¹ö¿¡ ´ë ÇÑ ¸¸µì´Ï´Ù È®ÀÎ ÇÏ °í ÀûÀý ÇÑ Äڵ带 ¼öÁ¤ ÇÕ´Ï´Ù. ¸í½É¿¡¼ ÇØ¾ß ÇÒ ¸î °¡Áö Æ÷ÀÎÆ®¸¦ ¿îÇ×:
±×°ÍÀº AfxOleInit ¸¦ È£Ãâ ÇÏ ¿© OLE ¶óÀ̺귯¸®¸¦ ÃʱâÈ ÇÏ´Â µ¥ ÇÊ¿äÇÑ
¼¹ö ¸®¼Ò½º ÇÚµé ¹× CDocTemplate »ý¼ºÀÚ·Î ¼³Á¤ÇÒ ¼ö ¾ø´Â ·±Å¸ÀÓ Å¬·¡½º Á¤º¸¸¦ ¼³Á¤ ÇÏ·Á¸é ¹®¼ ¼½Ä ÆÄÀÏ °³Ã¼¿¡ ´ëÇØ Setserverinfo¸¦ È£Ãâ¡£
¸í·ÉÁÙ¿¡ /Embedding ÀÖÀ¸¸é ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ Ç¥½Ã ¾È ÇÔ¡£
±ÍÇÏÀÇ ¹®¼¿¡ ´ë ÇÑ GUID ÇÊ¿ä ÇÕ´Ï´Ù. ±ÍÇÏÀÇ ¹®¼ À¯Çü (128 ºñÆ®)¿¡ ´ë ÇÑ °íÀ¯ ½Äº°ÀÚÀÔ´Ï´Ù. AppWizard ´ç½ÅÀ» À§ÇØ Çϳª¸¦ ¸¸µé °ÍÀÔ´Ï´Ù-±×·¡¼ ¸¸¾à ´ç½ÅÀÌ ¿©±â ¼³¸í ÇÏ´Â ±â¼úÀ» »ç¿ë ÇÏ ¿© »õ ¸¶¹ý»ç »ý¼º ¼¹ö ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ »õ Äڵ带 º¹»ç, ´ç½ÅÀº ´Ü¼øÈ÷ "ÈÉÄ¥ ¼ö" ÇØ´ç ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ GUID. ±×·¸Áö ¾ÊÀ¸¸é ÇØ´ç GUIDGENÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.BIN µð·ºÅ͸®¿¡ EXE À¯Æ¿¸®Æ¼¡£
±×°ÍÀº "" COleTemplateServer °³Ã¼¿¡ ¿¬°áÇÒ ¹®¼ ¼½Ä ÆÄÀÏ COleTemplateServer::ConnectTemplate ¸¦ È£Ãâ ÇÏ ¿© ÇÊ¿äÇÑ¡£
ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ µ¶¸³ ½ÇÇàÇü ½ÇÇà ¶§ ½Ã½ºÅÛ ·¹Áö½ºÆ®¸®¸¦ ¾÷µ¥ÀÌÆ® ÇÕ´Ï´Ù. »ç¿ëÀÚ°¡ À̵¿ ÇÏ´Â °æ¿ìÀÌ ¹æ¹ýÀÌ ÇÕ´Ï´Ù.EXE ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ë ÇÑ »õ À§Ä¡¸¦ °¡¸®Å°µµ·Ï Windows ½Ã½ºÅÛ µî·Ï µ¥ÀÌÅͺ£À̽º¸¦ ¾÷µ¥ÀÌ Æ® µË´Ï´Ù »õ·Î¿î À§Ä¡¿¡¼ ½ÇÇà¡£
AppWizard InitInstance¿¡ ´ë ÇÑ »ý¼º¿¡ µû¶ó ÀÌ·¯ÇÑ º¯°æ ³»¿ëÀ» ¸ðµÎ Àû¿ë ÇÑ ÈÄ HIERSVR À§ÇØ InitInstance (¹× °ü·ÃµÈ GUID) Àоî¾ß ÇÑ´Ù ´ÙÀ½°ú °°½À´Ï´Ù.:
// this is the GUID for HIERSVR documents
static const GUID BASED_CODE clsid =
{ 0xA0A16360L, 0xC19B, 0x101A, { 0x8C, 0xE5, 0x00, 0xDD, 0x01, 0x11, 0x3F, 0x12 } };
/////////////////////////////////////////////////////////////////////////////
// COLEServerApp initialization
BOOL COLEServerApp::InitInstance()
{
// OLE 2 initialization
if (!AfxOleInit())
{
AfxMessageBox("Initialization of the OLE failed!");
return FALSE;
}
// Standard initialization
LoadStdProfileSettings(); // Load standard INI file options
// Register document templates
CDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_HIERSVRTYPE,
RUNTIME_CLASS(CServerDoc),
RUNTIME_CLASS(CMDIChildWnd),
RUNTIME_CLASS(CServerView));
pDocTemplate->SetServerInfo(IDR_HIERSVRTYPE_SRVR_EMB);
AddDocTemplate(pDocTemplate);
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
SetDialogBkColor(); // gray look
// enable file manager drag/drop and DDE Execute open
m_pMainWnd->DragAcceptFiles();
EnableShellOpen();
m_server.ConnectTemplate(clsid, pDocTemplate, FALSE);
COleTemplateServer::RegisterAll();
// try to launch as an OLE server
if (RunEmbedded())
{
// "short-circuit" initialization -- run as server!
return TRUE;
}
m_server.UpdateRegistry();
RegisterShellFileTypes();
// not run as OLE server, so show the main window
if (m_lpCmdLine[0] == '\0')
{
// create a new (empty) document
OnFileNew();
}
else
{
// open an existing document
OpenDocumentFile(m_lpCmdLine);
}
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
return TRUE;
}
À§ÀÇ ÄÚµå IDR_HIERSVRTYPE_SRVR_EMB »õ ¸®¼Ò½º ID¸¦ °¡¸®Åµ´Ï´ÙÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ¶Ç ´Ù¸¥ ÄÁÅ×À̳ʿ¡ Æ÷ÇÔ µÈ ¹®¼¸¦ ÆíÁýÇÒ ¶§ »ç¿ë µÇ´Â ¸Þ´º ¸®¼Ò½ºÀÔ´Ï´Ù. MFC/OLE1 ¸Þ´º Ç׸ñÀÌ Æ÷ÇÔ µÈ Ç׸ñÀ» ÆíÁý ÇÏ·Á¸é ƯÁ¤ Áï¼®¿¡¼ ¼öÁ¤ µÇ¾ú½À´Ï´Ù. ÆÄÀÏ ±â¹Ý ¹®¼¸¦ ÆíÁý ÇÏ´Â ´ë½Å Æ÷ÇÔ µÈ Ç׸ñÀ» ÆíÁýÇÒ ¶§ ¿ÏÀüÈ÷ ´Ù¸¥ ¸Þ´º ±¸Á¶¸¦ »ç¿ë ÇÏ ¿© ÈξÀ ½±°Ô ÀÌ·¯ÇÑ µÎ °¡Áö º°µµ ¸ðµå¿¡ ´ë ÇÑ ´Ù¸¥ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ Á¦°ø ÇÕ´Ï´Ù. ¿ÏÀüÈ÷ º°µµ ¸Þ´º ¸®¼Ò½º´Â Æ÷ÇÔ µÈ °³Ã¼¿¡¼ Àå¼Ò¸¦ ÆíÁýÇÒ ¶§ »ç¿ë µË´Ï´Ù ³ªÁß¿¡ »ìÆìº¸°ÚÁö¸¸¡£
ÀÌ ¸®¼Ò½º¸¦ ¸¸µé·Á¸é Visual c + + ¸®¼Ò½º ½ºÅ©¸³Æ®¸¦ ·Îµå ÇÏ °í ±âÁ¸ IDR_HIERSVRTYPE ¸Þ´º ¸®¼Ò½º¸¦ º¹»ç ÇÕ´Ï´Ù. »õ ¸®¼Ò½º¸¦ IDR_HIERSVRTYPE_SRVR_EMB (À̰ÍÀÌ Appwizard¸¦ »ç¿ë ÇÏ ¿© µ¿ÀÏÇÑ ¸í¸í ±ÔÄ¢) À̸§À» ¹Ù²ß´Ï´Ù. ´ÙÀ½ "ÆÄÀÏ ¾÷µ¥ÀÌÆ®"; "ÆÄÀÏ ÀúÀå"À» º¯°æ ¸í·É ID ID_FILE_UPDATEÁ¦°ø ÇÕ´Ï´Ù. ¶ÇÇÑ º¯°æ "ÆÄÀÏ ÀúÀå" ÆÄÀÏ º¹»ç "À¸·Î" ÀúÀå; ¸í·É ID ID_FILE_SAVE_COPY_ASÁ¦°ø ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸í·ÉÀº ¸ðµÎÀÇ ±¸ÇöÀ» Á¦°ø ÇÏ´Â ÇÁ·¹ÀÓ ¿öÅ©¡£
\hiersvr\svritem.h(60): ¿À·ù C2433: 'OLESTATUS': ', ' °¡»ó¿¡¼ Çã¿ë µÇÁö ¾Ê½À´Ï´Ù µ¥ÀÌÅÍ ¼±¾ð
\hiersvr\svritem.h(60): ¿À·ù C2501: 'OLESTATUS': decl ÁöÁ¤ÀÚ¸¦ ´©¶ô
\hiersvr\svritem.h(60): ¿À·ù C2146: ±¸¹® ¿À·ù: ´©¶ô µÈ 'OnSetData' ½Äº°ÀÚ ¾Õ¿¡ ';'
\hiersvr\svritem.h(60): ¿À·ù C2061: ±¸¹® ¿À·ù: ½Äº°ÀÚ 'OLECLIPFORMAT'
\hiersvr\svritem.h(60): ¿À·ù C2501: 'OnSetData': decl ÁöÁ¤ÀÚ¸¦ ´©¶ô
OnSetData, ÀçÁ¤ÀÇ¿¡¼ ¹ß»ý ÇÏ´Â ¶§¹®¿¡ OLESTATUS Çü½ÄÀ¸·Î ÂüÁ¶ ÇÏ´Â ¿À·ù ¼ö°¡ ÀÖ½À´Ï´Ù. OLESTATUS Àº ¿À·ù¸¦ ¹Ýȯ ÇÏ´Â ¹æ¹ý À̾ú´Ù. ÀÌ MFC ÀϹÝÀûÀ¸·Î º¯È¯ µÈ HRESULT ¿À·ù°¡ ÀÖ´Â COleException ºñ·Ï HRESULT OLE 2¿¡¼ º¯°æ µÇ¾ú½À´Ï´Ù. ÀÌ Æ¯Á¤ °æ¿ì¿¡ OnSetData ÀÇ ÀçÁ¤ÀÇ À̹ǷΠ´õ ÀÌ»ó ÇÊ¿ä ÇÒ °¡Àå ½¬¿î °ÍÀº ±×°ÍÀ» Á¦°Å ÇÏ¡£
\hiersvr\svritem.cpp(30): ¿À·ù C2660: 'COleServerItem::COleServerItem': ÇÔ¼ö 1 ¸Å°³ º¯¼ö¸¦ ¹ÞÁö ¾Ê½À´Ï´Ù
COleServerItem »ý¼ºÀÚ Ãß°¡ 'BOOL' ¸Å°³ º¯¼ö¸¦ »ç¿ë ÇÕ´Ï´Ù. ÀÌ Ç÷¡±×´Â COleServerItem °³Ã¼¿¡ ´ëÇØ ¸Þ¸ð¸® °ü¸®¸¦ ¼öÇà ÇÏ´Â ¹æ¹ýÀ» °áÁ¤ ÇÕ´Ï´Ù. ÇÁ·¹ÀÓ ¿öÅ© ÀÌ·¯ÇÑ °³Ã¼ÀÇ ¸Þ¸ð¸® °ü¸®¸¦ ó¸® ÇÏ´Â true·Î ¼³Á¤ ÇÏ ¿©-±×µéÀº ´õ ÀÌ»ó ÇÊ¿äÇÑ °æ¿ì »èÁ¦ ÇÕ´Ï´Ù. HIERSVR CServerItem ( COleServerItem¿¡¼ ÆÄ»ý) °³Ã¼ »ç¿ë ÇÏ ¿© ³×ÀÌÆ¼ºê µ¥ÀÌÅÍÀÇ ÀÏȯÀ¸·ÎÀÌ Ç÷¡±×¸¦ false·Î ¼³Á¤ °Å ¾ß. ±×·¯¸é °¢ ¼¹ö Ç׸ñÀº »èÁ¦ µÇ´Â ½Ã±â¸¦ °áÁ¤ ÇÏ´Â HIERSVR¡£
\hiersvr\svritem.cpp(44): ¿À·ù C2259: 'CServerItem': Ãß»ó Ŭ·¡½º¸¦ ÀνºÅϽºÈÇÏ´Â ºÒ¹ý ½Ãµµ
\hiersvr\svritem.cpp(44): ¿À·ù C2259: 'CServerItem': Ãß»ó Ŭ·¡½º¸¦ ÀνºÅϽºÈÇÏ´Â ºÒ¹ý ½Ãµµ
ÀÌ·¯ÇÑ ¿À·ù¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ ÀϺΠ' ¼ø¼ö °¡»ó ' ÇÔ¼ö´Â Cserveritem¿¡¼ ÀçÁ¤ÀÇ µÇÁö ¾Ê½À´Ï´Ù. °¡Àå °¡´É¼ºÀÌÀÌ OndrawÀÇ ¸Å°³ º¯¼ö ¸ñ·Ï¿¡¼ º¯°æ µÈ »ç½Ç¿¡ ÀÇÇØ ¹ß»ý ÇÕ´Ï´Ù. ÀÌ ¿À·ù¸¦ ÇØ°á ÇÏ·Á¸é CServerItem::OnDraw °°ÀÌ º¯°æ (»Ó¸¸ ¾Æ´Ï¶ó svritem.h¿¡ ¼±¾ð)
BOOL CServerItem::OnDraw(CDC* pDC, CSizeamp; rSize)
{
?? / / ³ëµå¸¦ ±×¸®´Â OLE¿¡¼ ¿äû
?? pDC-> SetMapMode(MM_TEXT); / / Ç×»ó Çȼ¿
?? ¹Ýȯ DoDraw (pDC, CPoint(0,0), FALSE);
}
»õ ¸Å°³ º¯¼ö´Â 'rSize'. ÀÌ Æí¸® ÇÏ °Ô ÇÏ´Â °æ¿ì µå·ÎÀ×ÀÇ Å©±â¿¡ ä¿ï ¼ö ÀÖ½À´Ï´Ù. ÀÌ Å©±â´Â HIMETRIC¿©¾ß ÇÕ´Ï´Ù. ÀÌ °æ¿ì ±×°ÍÀº ¾Æ´Ï¹Ç·ÎÀÌ °ªÀ» ä¿ì±â À§ÇØ Æí¸® ÇÏ °Ô ¹üÀ§¸¦ °Ë»ö ÇÏ·Á¸é OnGetExtent ¸¦ È£Ãâ ÇÏ´Â ÇÁ·¹ÀÓ ¿öÅ©. ±× ÀÛµ¿, OnGetExtent ±¸Çö ÇØ¾ß:
BOOL CServerItem::OnGetExtent(DVASPECT dwDrawAspect, CSizeamp; rSize)
{
?? °æ¿ì (dwDrawAspect! = DVASPECT_CONTENT)
?????? COleServerItem::OnGetExtent (dwDrawAspect, rSize); ¹Ýȯ
??????
?? rSize = CalcNodeSize();
?? TRUE¸¦ ¹Ýȯ ÇÕ´Ï´Ù.
}
\hiersvr\svritem.cpp(104): ¿À·ù C2065: 'm_rectBounds': ¼±¾ð µÇÁö ¾ÊÀº ½Äº°ÀÚ
\hiersvr\svritem.cpp(104): ¿À·ù C2228: ¿ÞÂÊÀÇ '.SetRect' Ŭ·¡½º/±¸Á¶Ã¼/union Çü½ÄÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
\hiersvr\svritem.cpp(106): ¿À·ù C2664: ' void __pascal __far DPtoLP (±¸Á¶Ã¼: __far tagPOINT *, int) __far const ': ¸Å°³ º¯¼ö 1¿¡¼ º¯È¯ÇÒ ¼ö ¾ø½À´Ï´Ù ' __far int *'À» ' ±¸Á¶Ã¼: tagPOINT __far *'(&A)
Cserveritem::calcnodesize¿¡¼ ÇÔ¼ö Ç׸ñ Å©±â HIMETRIC º¯È¯ ÇÏ °í m_rectBounds¿¡ ÀúÀå µË´Ï´Ù. ºÒ¹ý ü·ùÀÚ 'm_rectBounds' ¼Ò¼Ó COleServerItem Á¸Àç ÇÏÁö ¾Ê½À´Ï´Ù ( m_sizeExtent¿¡ ÀÇÇØ ºÎºÐÀûÀ¸·Î ´ëü µÇ¾ú½À´Ï´Ù ÇÏÁö¸¸ OLE 2¿¡¼ÀÌ ¸â¹ö m_rectBounds ole1¿¡¼ Çß´ø °Í º¸´Ù ¾à°£ ´Ù¸¥ »ç¿ëÀ» ÇϰíÀÖ´Ù). ÀÌ ¸â¹ö º¯¼ö¸¦ HIMETRIC Å©±â¸¦ ¼³Á¤ ÇÏ´Â ´ë½ÅÀÌ ¹Ýȯ ÇÕ´Ï´Ù. ÀÌ ¹Ýȯ °ªÀº OnGetExtent, ÀÌÀü ±¸Çö¿¡ »ç¿ë¡£
CSize CServerItem::CalcNodeSize()
{
nbsp;? CClientDC dcScreen(NULL);
m_sizeNode (m_strDescription, dcScreen.GetTextExtent =
???? m_strDescription.GetLength());
?? m_sizeNode + = CSize (CX_INSET * 2, CY_INSET * 2);
/ / Á¦¾ÈµÈ HIMETRIC Å©±â ¼³Á¤
?? CSize Å©±â (m_sizeNode.cx, m_sizeNode.cy);
?? dcScreen.SetMapMode(MM_HIMETRIC);
?? dcScreen.DPtoLP(&size);
?? ¹Ýȯ Å©±â;
}
Cserveritem´Â ¶ÇÇÑ COleServerItem::OnGetTextData¸¦ ÀçÁ¤ÀÇÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â MFC/OLE¿¡¼ »ç¿ë µÇÁö ¾Ê½À´Ï´Ù ¹× ´Ù¸¥ ¸ÞÄ¿´ÏÁòÀ¸·Î ´ëü µË´Ï´Ù. MFC OLE »ùÇÃÀÇ MFC 3.0 ¹öÀü HIERSVR COleServerItem::OnRenderFileData¸¦ ÀçÁ¤ÀÇ ÇÏ ¿©ÀÌ ±â´ÉÀ» ±¸Çö ÇÕ´Ï´Ù. ÀÌ ±â´ÉÀº OnGetTextData ÀçÁ¤ÀÇ Á¦°ÅÇÒ ¼ö ÀÖµµ·ÏÀÌ ±âº» Æ÷Æ®¿¡ ´ë ÇÑ Áß¿ä ÇÏÁö ¾Ê½À´Ï´Ù.
ÇØ°á µÇÁö ¾ÊÀº svritem.cpp¿¡¼ ´õ ¸¹Àº ¿À·ù°¡ ÀÖ½À´Ï´Ù. ±×µéÀº "ÁøÂ¥" ¿À·ù ? ÀÌÀü ¿À·ù¿¡ ÀÇÇØ ¹ß»ý ÇÏ´Â ±×³É ¿À·ù¡£
\hiersvr\svrview.cpp(325): ¿À·ù C2660: 'CopyToClipboard': ÇÔ¼ö 2 ¸Å°³ º¯¼ö¸¦ ¹ÞÁö ¾Ê½À´Ï´Ù
COleServerItem::CopyToClipboard ´Â ´õ ÀÌ»ó 'bIncludeNative' Ç÷¡±×¸¦ Áö¿øÇÕ´Ï´Ù. ³×ÀÌÆ¼ºê µ¥ÀÌÅÍ (¼¹ö Ç׸ñÀÇ Serialize ÇÔ¼ö¿¡ ÀÇÇØ ¾²¿©Áø µ¥ÀÌÅÍ)´Â ù ¹øÂ° ¸Å°³ º¯¼ö¸¦ Á¦°Å ÇÏ´Â ±×·¡¼ Ç×»ó º¹»ç µË´Ï´Ù. ¶ÇÇÑ, CopyToClipboard ´Â FALSE¸¦ ¹Ýȯ ÇÏ´Â ´ë½Å ¿À·ù°¡ ¹ß»ý ÇÏ´Â °æ¿ì ¿¹¿Ü°¡ throw µË´Ï´Ù. Cserverview::oneditcopy¿¡ ´ë ÇÑ Äڵ带 ´ÙÀ½°ú °°ÀÌ º¯°æ
void CServerView::OnEditCopy()
{
nbsp;? °æ¿ì (m_pSelectedNode = = NULL)
?????? AfxThrowNotSupportedException();
??????
?? ½Ãµµ
?? {
?????? m_pSelectedNode-> CopyToClipboard(TRUE);
?? }
?? CATCH_ALL(e)
?? {
?????? AfxMessageBox ("Ŭ¸³º¸µå¿¡ º¹»ç ÇÏÁö ¸øÇß½À´Ï´Ù.");
?? }
?? END_CATCH_ALL}
HIERSVRÀÇ MFC 2.0 ¹öÀüÀÇ ÆíÁý¿¡¼ ¹ß»ý ÇÏ´Â OCLIENTÀÇ µ¿ÀÏÇÑ ¹öÀüÀ» °Å±â º¸´Ù ´õ ¸¹Àº ¿À·ù Çß´Ù, ºñ·Ï °Å±â ½ÇÁ¦·Î ÀûÀº º¯°æ¡£
ÀÌ ½ÃÁ¡¿¡¼ HIERSVR ÄÄÆÄÀÏ ¹× ¸µÅ© µÇ¸ç ´ÙÀ½ ±¸ÇöÇÒ Á¦ÀÚ¸®¿¡¼ ÆíÁý ±â´ÉÀ» ÇÏÁö ¾Ê°í OLE ¼¹ö·Î ÀÛµ¿¡£
"ºñÁÖ¾ó ÆíÁý" Ãß°¡
"ºñÁÖ¾ó ÆíÁý" (¶Ç´Â ÇöÀç À§Ä¡¿¡¼ Ȱ¼ºÈ)ÀÌ ¼¹ö ÀÀ¿ë ÇÁ·Î±×·¥À» Ãß°¡ ÇÏ·Á¸é °Å±â¿¡ ¸î °¡Áö ´ç½ÅÀÌ ¾Ë¾Æ¼ ÇØ¾ß ÇÕ´Ï´Ù.:
¸Þ´º ¸®¼Ò½º ¸¸µé±â ½±½À´Ï´Ù. Visual c + + ½ÇÇà, ¸Þ´º ¸®¼Ò½º IDR_HIERSVRTYPE IDR_HIERSVRTYPE_SRVR_IP ¶ó´Â ¸Þ´º ¸®¼Ò½º¸¦ º¹»ç ÇÕ´Ï´Ù. ÆíÁý ¹× µµ¿ò¸» ¸Þ´º ÆË¾÷¸¸ ¿ÞÂÊ ¸Þ´º¸¦ ¼öÁ¤ ÇÕ´Ï´Ù. ÆíÁý ¹× µµ¿ò¸» ¸Þ´º »çÀÌ ¸Þ´º¿¡ µÎ °³ÀÇ ±¸ºÐ ±âÈ£¸¦ Ãß°¡ (ó·³ º¸ÀÌ°Ô ÇÑ´Ù: ÆíÁý | | µµ¿ò¸»)ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ±¸ºÐÀº ¹«¾ùÀ» ÀÇ¹Ì ÇÏ °í ¼¹ö ¹× ÄÁÅ×ÀÌ³Ê ¸Þ´º º´ÇÕ ¹æ¹ý¿¡ ÀÚ¼¼ÇÑ ³»¿ëÀº "¸Þ´º ¹× ¸®¼Ò½º: ¸Þ´º º´ÇÕ" OLE 2 ¼ö¾÷¿¡¼ À» ÂüÁ¶ ÇϽʽÿÀ.
ÇÏÀ§ ÁýÇÕ µµ±¸ ¸ðÀ½¿¡ ´ë ÇÑ ºñÆ®¸Ê "¼¹ö" ¿É¼ÇÀ» üũ ÇÑ ½Å¼±ÇÑ »ý¼º AppWizard ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ º¹»ç ÇÏ ¿© ½±°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ Visual c + +°¡ÀÌ ºñÆ®¸ÊÀ» °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù. ºñÆ®¸Ê IDR_HIERSVRTYPE_SRVR_IP ID¸¦ Á¦°ø ÇØ¾ß ÇÕ´Ï´Ù.
¼¹ö Áö¿ø »Ó¸¸ ¾Æ´Ï¶ó »ý¼º AppWizard ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ COleIPFrameWnd ¿¡¼ ÆÄ»ý µÈ Ŭ·¡½º¸¦ º¹»çÇÒ ¼ö ÀÖ½À´Ï´Ù. µÎ ÆÄÀÏ, IPFRAME¸¦ º¹»ç ÇÕ´Ï´Ù.CPP ¹× IPFRAMEÀÔ´Ï´Ù.H¸¦ ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ ÇÕ´Ï´Ù. LoadBitmap È£Ãâ IDR_HIERSVRTYPE_SRVR_IP, ÀÌÀü ´Ü°è¿¡¼ ¸¸µç ºñÆ®¸Ê °¡¸®Å°´Â ÀÖ´ÂÁö È®ÀÎ ÇϽʽÿÀ.
ÀÌÁ¦´Â ¸ðµç »õ·Î¿î ¸®¼Ò½º ¹× Ŭ·¡½º¸¦ ¸¸µç ÇÁ·¹ÀÓ ¿öÅ© µé¿¡ ´ëÇØ ¾Ë°í (±×¸®°í ¾Ë°í ÀÌÁ¦ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ ³»ºÎ ÆíÁý Áö¿ø)´Â ÇÊ¿äÇÑ Äڵ带 Ãß°¡ ÇÕ´Ï´Ù. InitInstance ÇÔ¼ö¿¡¼ È£Ãâ ÇÏ´Â SetServerInfo ¸¦ ¸î °¡Áö ´õ ¸¹Àº ¸Å°³ º¯¼ö¸¦ Ãß°¡ ÇÏ ¿© ÀÌ·ç¾îÁý´Ï´Ù.:
pDocTemplate-gt;SetServerInfo (IDR_HIERSVRTYPE_SRVR_EMB,
?? IDR_HIERSVRTYPE_SRVR_IP, RUNTIME_CLASS(CInPlaceFrame))(&G)
±×°ÍÀº Áö±Ý À§Ä¡¿¡¼ ½ÇÇàÇÒ Áغñ°¡ ¶ÇÇÑ À§Ä¡¿¡¼ Ȱ¼ºÈ¸¦ Áö ¿øÇÏ´Â ¸ðµç ÄÁÅ×À̳ʿ¡. ÇÏÁö¸¸, °Å±â¿¡ ÇϳªÀÇ »ç¼ÒÇÑ ¹ö±× Äڵ忡 ¿©ÀüÈ÷ ¼û¾î ÀÖ´Ù. HIERSVR´Â ¸¶¿ì½º ¿À¸¥ÂÊ ´ÜÃ߸¦ ´©¸¦ ¶§ Ç¥½Ã µÇ´Â »óȲ¿¡ ¸Â´Â ¸Þ´º¸¦ Áö¿ø ÇÕ´Ï´Ù. ÀÌ ¸Þ´º´Â HIERSVR¸¦ ¿ÏÀüÈ÷ ¿°í ÇÏÁö¸¸ Æ÷ÇÔ-Á¦ÀÚ¸®¿¡¼ ÆíÁýÇÒ ¶§ ÀÛµ¿ ÇÏÁö ¾Ê½À´Ï´Ù ¶§ ÀÛµ¿ ÇÕ´Ï´Ù. ÀÌÀ¯´ÂÀÌ ÇÑ ÁÙÀÇ Äڵ忡¼ Cserverview::onrbuttondown¿¡ °íÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
pMenu-gt;TrackPopupMenu(TPM_CENTERALIGN | TPM_RIGHTBUTTON,
?? point.x, point.y, AfxGetApp()-> m_pMainWnd)
ÅëÁö¿¡ ´ë ÇÑ ÂüÁ¶°¡ AfxGetApp ()-gt; m_pMainWnd. ¼¹ö°¡ ¿øÀ§Ä¡ Ȱ¼ºÈ ¶§ ÁÖ Ã¢ ÇϰíÀÖ´Ù m_pMainWnd ¼³Á¤ µÇ¾î ÇÏÁö¸¸ º¸Åë º¸ÀÌÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ,ÀÌ Ã¢ MDI ÇÁ·¹ÀÓ Ã¢ ¼¹ö¸¦ ¿ÏÀüÈ÷ ¿°í ³ªÅ¸³´Ù ¶Ç´Â µ¶¸³ ½ÇÇàÇü ½ÇÇà ÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸ÞÀÎ À©µµ¿ì¸¦ ¸»ÇÕ´Ï´Ù. Ȱ¼º ÇÁ·¹ÀÓ Ã¢À» ÂüÁ¶ ÇÏÁö ¾Ê½À´Ï´Ù-¶§ ÇöÀç À§Ä¡¿¡¼ Ȱ¼ºÈ´Â COleIPFrameWnd¿¡¼ ÆÄ»ý µÈ ÇÁ·¹ÀÓ Ã¢. Á¦ÀÚ¸®¿¡¼ ÆíÁý ÇÏ °í,ÀÌ ¹öÀüÀÇ MFC AfxGetMainWnd»õ ÇÔ¼ö¸¦ Ãß°¡ ÇÏ´Â °æ¿ì¿¡ ¿Ã¹Ù¸¥ Ȱ¼º âÀ» ¾òÀ¸·Á¸é. ´ë½ÅÀÌ ÇÔ¼ö¸¦ »ç¿ë ÇØ¾ß ÇÕ´Ï´Ù ÀϹÝÀûÀ¸·Î, AfxGetApp()-> m_pMainWnd. ÀÌ Äڵ带 ´ÙÀ½°ú °°ÀÌ º¯°æ ÇØ¾ß:
pMenu-gt;TrackPopupMenu(TPM_CENTERALIGN | TPM_RIGHTBUTTON,
?? point.x, point.y, AfxGetMainWnd(&))
ÀÌÁ¦ OLE ¼¹ö¸¦ ÃÖ¼Ò ±â´É À§Ä¡¿¡¼ Ȱ¼ºÈ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¾ÆÁ÷µµ ¸¹Àº ±â´É MFC/Àº¿¡¼ »ç¿ëÇÒ ¼ö ¾ø¾ú´ø MFC/OLE 2¿Í ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±¸Çö ÇÏ °í ÀÖ´Â ±â´É¿¡ ´õ ¸¹Àº ¾ÆÀ̵ð¾î¿¡ ´ë ÇÑ HIERSVR »ùÇÃÀ» ÂüÁ¶ ÇϽʽÿÀ. HIERSVR¸¦ ±¸Çö ÇÏ´Â ±â´É Áß ÀϺδ ´ÙÀ½°ú °°½À´Ï´Ù.:
MFC 3.0¿¡¼ HIERSVR »ùÇÃÀº ¶ÇÇÑ ÀÚ»çÀÇ ¼¹ö Ç׸ñ¿¡ ´ë ÇÑ ¾à°£ ´Ù¸¥ µðÀÚÀÎÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¸ð¸®¸¦ Àý¾à ÇÏ´Â µ¥ µµ¿òÀÌ ÇÏ °í ±ÍÇÏÀÇ ¸µÅ©¸¦ Á» ´õ À¯¿¬ ÇÏ °Ô ¸¸µå´Â. HIERSVRÀÇ 2.0 ¹öÀü°ú Æ®¸®ÀÇ °¢ ³ëµå¿¡ ÇÑ COleServerItem. COleServerItem ÀÌ·¯ÇÑ ³ëµåÀÇ °¢°¢¿¡ ´ë ÇÑ ¾ö°Ý ÇÏ °Ô ÇÊ¿äÇÑ °Í º¸´Ù Á¶±Ý ´õ ¸¹Àº ¿À¹ö Çìµå¸¦ ¿î¹Ý ÇÏÁö¸¸ COleServerItem °¢ Ȱ¼º ¸µÅ©¿¡ ´ë ÇÑ ÇÊ¿ä ÇÕ´Ï´Ù. ÇÏÁö¸¸ ´ëºÎºÐÀÇ ºÎºÐÀ» µé¾î, ¾î¶² ÁÖ¾îÁøµÈ ½Ã°£¿¡ ¸Å¿ì ¸î °¡Áö Ȱ¼º ¸µÅ© ÀÖ½À´Ï´Ù. ÀÌ º¸´Ù È¿À²ÀûÀ¸·Î ¸¸µé·Á°í,ÀÌ ¹öÀüÀÇ MFC¿¡¼ HIERSVR COleServerItem¿¡¼ ³ëµå¸¦ ºÐ¸® ÇÕ´Ï´Ù. ±×°ÍÀº CServerNode ¹× CServerItem Ŭ·¡½º ÀÖ´Ù. CServerItem ( COleServerItem¿¡¼ ÆÄ»ý)¸¸ Çʿ信 µû¶ó ¸¸µé¾îÁý´Ï´Ù. ÄÁÅ×ÀÌ³Ê (¶Ç´Â ÄÁÅ×À̳Ê)´Â ƯÁ¤ ³ëµå¿¡ ƯÁ¤ ¸µÅ©¸¦ »ç¿ë ÇÏ ¿© ÁßÁö, ÀÏ´ÜÀº Cservernode¿Í °ü·Ã µÈ CServerItem °³Ã¼°¡ »èÁ¦ µË´Ï´Ù. ÀÌ µðÀÚÀÎÀº ´õ È¿À²ÀûÀÌ °í ´õ À¯¿¬ ÇÕ´Ï´Ù. À¯¿¬¼ºÀÇ ¿©·¯ ¼±Åà ¸µÅ©¸¦ ´Ù·ê ¶§ ¿Â´Ù. HIERSVRÀÇ µÎ °¡Áö ¹öÀü Áß ¾î´À ´ÙÁß ¼±ÅÃÀ» Áö¿ø ÇÏÁö¸¸ Ãß°¡ (¿Í °°Àº ¼±Åà ÇÏ·Á¸é ¸µÅ©¸¦ Áö¿ø Çϱâ À§ÇØ) ÈξÀ ´õ ½±°Ô µÉ °Í À̶ó°í HIERSVR COleServerItem ¿ø½Ã µ¥ÀÌÅÍ¿¡¼ ºÐ¸® µÈ ÀÌÈÄ MFC 3.0 ¹öÀü¡£
±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)