كيفية تجاوز واجهة في تطبيق MFC باستخدام Visual C++

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

141277
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
ملاحظة اعتماد NET C++ Microsoft Visual (2002) كلا تعليمات برمجية تمت إدارتها الطراز المتوفر من خلال برنامج .NET Framework و Windows الأصلي غير مدار نموذج التعليمات البرمجية. تنطبق المعلومات الواردة في هذه المقالة على غير مدار Visual C++ التعليمات البرمجية فقط.

ملاحظة دعم Microsoft Visual C++ 2005 كلا تعليمات برمجية تمت إدارتها الطراز المتوفر من خلال برنامج .NET Framework و Windows الأصلي غير مدار نموذج التعليمات البرمجية.
الموجز
في تطبيق MFC الذي يمكن تجاوز الواجهات الموجودة في فئة وكذلك توفير واجهات إضافية. تجاوز واجهة في هذه الحالة المترادفة مع استبدال واجهة. يوضح المثال في هذه المقالة كيفية تجاوز واجهة في فئة مع الاحتفاظ تطبيق واجهة الأصلي بحيث أنه يمكن تفويض إلى بواسطة تطبيق واجهة جديدة.

لا تعامل هذه المقالة مع تجاوز تطبيق IDispatch كما هذه حالة خاصة. للحصول على مزيد من المعلومات حول كيفية تجاوز IDispatch في MFC انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
140616استبدال تطبيق IDispatch MFC
معلومات أخرى
ستتجاوز الخطوات التالية في IOleObject التنفيذ الافتراضية عنصر التحكم OLE التي تم إنشاؤها بواسطة "معالج التحكم".

  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 مع اسم عنصر التحكم و MyOleObject الاسم الذي اخترته لفئة المتداخلة يعتمد IOleObject.
  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 و يتم حساب m_xMyOleObject بواسطة إزالة I من واجهة يتم m_x إضافة وغير المعتمدة.

لاحظ أن هذه الطرق تمرير ببساطة الاستدعاء على IOleObject الأصلي التنفيذ. على الرغم من ذلك، هذا غير متطلبات; قد وظائف و تفويض تطبيق الأصلي أو لا المفوض الإطلاق.
مراجع
ملاحظات الفنية # 38 و # 39.

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 141277 - آخر مراجعة: 02/28/2014 08:00:10 - المراجعة: 3.1

  • Microsoft Foundation Class Library 4.2
  • kbnosurvey kbarchive kbmt kbarchitecture kbctrl kbhowto KB141277 KbMtar
تعليقات