Visual C++를 사용하여 MFC 응용 프로그램에서 인터페이스를 재정의하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 141277 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
참고 Microsoft Visual C++ NET (2002) .NET Framework 및 관리되지 않는 네이티브 Windows에 의해 제공되는 두 관리 코드 모델을 지원하는 코드 모델. 이 문서에 나와 있는 정보는 관리되지 않는 Visual C++ 적용하는 경우에만 코드.

참고 Visual C++ 2005 .NET Framework 및 관리되지 않는 네이티브 Windows에 의해 제공되는 두 관리 코드 모델을 지원하는 코드 모델.
모두 확대 | 모두 축소

요약

MFC 응용 프로그램에서 사용하면 기존 인터페이스 클래스의 재정의 뿐만 아니라 있습니다 추가 인터페이스를 제공합니다. 길다 는 것은 인터페이스를 재정의하는 경우에 인터페이스를 교체하는 함께 것입니다. 이 문서의 예제에서는 이를 위해 새 인터페이스 구현에서 위임할 수 있도록 원본 인터페이스 구현을 유지하면서 클래스 인터페이스를 재정의하는 방법을 보여 줍니다.

이 특별한 그대로 이 문서에서는 IDispatch 구현을 재정의하는 함께 처리할 수 있지 않습니다. MFC의 IDispatch 무시하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
140616MFC IDispatch 구현을 바꾸기

추가 정보

다음 단계를 사용하여 IOleObject 우선합니다 구현을 위한 기본 컨트롤 컨트롤 마법사에 의해 생성된.

  1. 컨트롤에 IOleObject 구현 선언을 추가하려면 COleControl 파생 클래스에 대한 헤더 파일에 다음 코드를 추가합니다:
          // Interface Maps
          protected:
               // IOleObject
               BEGIN_INTERFACE_PART(MyOleObject, IOleObject)
                   INIT_INTERFACE_PART(CIOleOverCtrl, MyOleObject)
                   STDMETHOD(SetClientSite)(LPOLECLIENTSITE);
                   STDMETHOD(GetClientSite)(LPOLECLIENTSITE*);
                   STDMETHOD(SetHostNames)(LPCOLESTR, LPCOLESTR);
                   STDMETHOD(Close)(DWORD);
                   STDMETHOD(SetMoniker)(DWORD, LPMONIKER);
                   STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);
                   STDMETHOD(InitFromData)(LPDATAOBJECT, BOOL, DWORD);
                   STDMETHOD(GetClipboardData)(DWORD, LPDATAOBJECT*);
                   STDMETHOD(DoVerb)(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND,
                           LPCRECT);
                   STDMETHOD(EnumVerbs)(IEnumOLEVERB**);
                   STDMETHOD(Update)();
                   STDMETHOD(IsUpToDate)();
                   STDMETHOD(GetUserClassID)(CLSID*);
                   STDMETHOD(GetUserType)(DWORD, LPOLESTR*);
                   STDMETHOD(SetExtent)(DWORD, LPSIZEL);
                   STDMETHOD(GetExtent)(DWORD, LPSIZEL);
                   STDMETHOD(Advise)(LPADVISESINK, LPDWORD);
                   STDMETHOD(Unadvise)(DWORD);
                   STDMETHOD(EnumAdvise)(LPENUMSTATDATA*);
                   STDMETHOD(GetMiscStatus)(DWORD, LPDWORD);
                   STDMETHOD(SetColorScheme)(LPLOGPALETTE);
               END_INTERFACE_PART(MyOleObject)
    
          DECLARE_INTERFACE_MAP();
    						
    이것은 중첩된 클래스 XMyOleObject 컨트롤 클래스에 추가합니다. 이러한 매크로는 IUnknown 메서드 구현해야 있으므로 IUnknown 인터페이스 메서드를 포함하여 인터페이스 메서드를 선언하는 유의하십시오.
  2. IOleObject 인터페이스 컨트롤의 인터페이스 맵에 INTERFACE_PART 매크로 컨트롤의 구현 파일 추가:
          BEGIN_INTERFACE_MAP(CIOleOverCtrl, COleControl)
             INTERFACE_PART(CIOleOverCtrl, IID_IOleObject, MyOleObject)
          END_INTERFACE_MAP()
    						
    CIOleOverCtrl IOleObject 지원하는 중첩된 클래스에 대해 선택한 이름이 있는 컨트롤 및 MyOleObject 이름으로 바꾸기.
  3. 사용자가 선언된 인터페이스의 메서드를 구현하십시오. 다음 코드는 컨트롤의 구현 파일 추가:
          STDMETHODIMP_(ULONG) CIOleOverCtrl::XMyOleObject::AddRef()
          {
              METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)
              ASSERT_VALID(pThis);
    
              return pThis->m_xOleObject.AddRef();
          }
    
          STDMETHODIMP_(ULONG) CIOleOverCtrl::XMyOleObject::Release()
          {
              METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)
              ASSERT_VALID(pThis);
    
              return pThis->m_xOleObject.Release ();
          }
    
          STDMETHODIMP CIOleOverCtrl::XMyOleObject::QueryInterface(
              REFIID iid, LPVOID far* ppvObj)
          {
              METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)
              ASSERT_VALID(pThis);
    
              return pThis->m_xOleObject.QueryInterface ( iid,  ppvObj);
          }
    
          STDMETHODIMP
          CIOleOverCtrl::XMyOleObject::SetClientSite(LPOLECLIENTSITE
          pClientSite)
          {
              METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)
                 ASSERT_VALID(pThis);
    
              return pThis->m_xOleObject.SetClientSite ( pClientSite );
          }
          ...
메서드의 나머지 위치를 CIOleOverCtrl 컨트롤 이름은, XMyOleObject IOleObject, 지원하는 중첩된 클래스의 이름은 및 I 지원되는 및 추가 m_x 중인 인터페이스에서 제거하여 m_xMyOleObject 계산 동일한 패턴을 따릅니다.

이러한 메서드는 단순히 원래 IOleObject에 대한 호출을 전달할 참고 구현. 그러나 이 요구 사항은 아니며, 기능을 추가하고 원래 구현이나 않는 대리자 전혀 위임할 수 있습니다.

참조

기술 정보 # 38 및 # 39입니다.

속성

기술 자료: 141277 - 마지막 검토: 2014년 2월 27일 목요일 - 수정: 3.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Foundation Class Library 4.2?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 2.2
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
    • Microsoft Visual C++ 2005 Express Edition
키워드:?
kbnosurvey kbarchive kbmt kbarchitecture kbctrl kbhowto KB141277 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com