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

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.

141277
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.
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 #.

Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 141277 - Laatst bijgewerkt: 03/01/2014 12:50:20 - Revisie: 4.0

  • Microsoft Foundation Class Library 4.2
  • kbnosurvey kbarchive kbarchitecture kbctrl kbhowto kbmt KB141277 KbMtnl
Feedback