Een interface in een MFC-toepassing met behulp van Visual C++ negeren

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 141277 - Bekijk de producten waarop dit artikel van toepassing is.
Dit artikel is gearchiveerd. Het wordt aangeboden in de huidige vorm en wordt niet meer bijgewerkt.
Opmerking De beheerde code wordt ondersteund door Microsoft Visual C++-NET (2002) model van het .net Framework en de onbeheerde native Windows codemodel. De informatie in dit artikel geldt voor onbeheerde Visual C++ code.

Opmerking Microsoft Visual C++ 2005 ondersteund de beheerde code model van het .net Framework en de onbeheerde native Windows codemodel.
Alles uitklappen | Alles samenvouwen

Samenvatting

U kunt bestaande interfaces overschrijven in een MFC-toepassing in een klasse eveneens als bieden aanvullende interfaces. Een interface in overschrijven in dit geval is synoniem met een interface te vervangen. Het voorbeeld in dit artikel ziet u hoe u een interface in een klasse behoud overschrijven de oorspronkelijke implementatie interface zodat deze kan worden gedelegeerd aan door de nieuwe interface-implementatie.

Dit artikel behandelt niet overschrijven Als dit de IDispatch-implementatie is een speciaal geval. Klik voor meer informatie over het overschrijven van IDispatch in MFC op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:
140616Implementatie van IDispatch MFC vervangen

Meer informatie

Het gegevenstype wordt vervangen door de volgende stappen implementatie voor standaard OLE-besturingselement gegenereerd door de Wizard beheer.

  1. De verklaring van de implementatie van het gegevenstype toevoegen het besturingselement de volgende code toevoegen aan het header-bestand voor de Klasse COleControl afgeleid:
          // 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();
    						
    Hiermee voegt u een geneste XMyOleObject-klasse toe aan uw klasse control. Let wel: deze macro's declareren interfacemethoden inclusief IUnknown-interface methoden, zodat de IUnknown-methoden moet worden geïmplementeerd.
  2. De gegevenstype-interface toevoegen aan de kaart van de interface voor de door een macro INTERFACE_PART toevoegen aan het bestand van de uitvoering van de besturingselement:
          BEGIN_INTERFACE_MAP(CIOleOverCtrl, COleControl)
             INTERFACE_PART(CIOleOverCtrl, IID_IOleObject, MyOleObject)
          END_INTERFACE_MAP()
    						
    CIOleOverCtrl vervangen door de naam van de controle- en MyOleObject met de naam gekozen voor de geneste klasse die ondersteund gegevenstype.
  3. Implementeert de interfacemethoden die u hebt gedeclareerd. Toevoegen de de volgende code in het bestand uitvoering voor het besturingselement:
          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 );
          }
          ...
De rest van de methoden volgen hetzelfde patroon waar CIOleOverCtrl is de naam van het besturingselement, XMyOleObject is de naam van de geneste klasse die gegevenstype en m_xMyOleObject ondersteunt wordt berekend door het verwijderen van de interface wordt ondersteund en m_x toevoegen.

Houd er rekening mee dat deze methoden de oproep aan het oorspronkelijke gegevenstype gewoon doorgeven implementatie. Dit is echter niet vereist; u kunt functionaliteit toevoegen overdragen aan de oorspronkelijke implementatie of helemaal niet te delegeren.

Referenties

Technische opmerkingen # 38 en 39 #.

Eigenschappen

Artikel ID: 141277 - Laatste beoordeling: zaterdag 1 maart 2014 - Wijziging: 4.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Foundation Class Library 4.2 op de volgende platformen
    • 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++ 5.0 Professional Edition
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
    • Microsoft Visual C++ 2005 Express Edition
Trefwoorden: 
kbnosurvey kbarchive kbarchitecture kbctrl kbhowto kbmt KB141277 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende: 141277

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