كيف يمكنني المضيف WPF المحتوى في تطبيقات MFC?

StackOverflow https://stackoverflow.com/questions/829952

  •  06-07-2019
  •  | 
  •  

سؤال

أنا ذاهب إلى الإجابة عن سؤالي هنا لأنني قضيت بضع ساعات التفكيك معا وأراد أن حصة ما وجدت في أمل أنني سوف ينقذ شخص آخر الحفر.

هناك MSDN تجول أن يحصل لك أكثر من وسيلة من هناك ، ولكن هناك عددا من القطع الرئيسية التي وجدت في أي مكان آخر.على سبيل المثال, تجول يقول لك على مكان الخط [System::STAThreadAttribute] قبل _tWinMain() التعريف ولكن إذا كنت تنفيذ معيار التطبيق MFC ثم لم يكن لديك _tWinMain() في التعليمات البرمجية المصدر.

إذا كان أي شيء هنا غير واضح لا تتردد في طرح الأسئلة و سوف تحرير الجواب لجعل الأمور أكثر وضوحا.

هل كانت مفيدة؟

المحلول

الخطوة 1:تكوين التطبيق MFC تجميع مع CLR الدعم

أفضل طريقة لتحقيق التوافق بين الأم C++ مدارة .صافي رمز هو تجميع تطبيق C++ مدارة بدلا من مواليد C++.ويتم ذلك عن طريق الذهاب إلى خصائص تكوين المشروع.في إطار العامة هناك خيار "الشائعة لغة وقت التشغيل دعم".تعيين هذه القيمة إلى "الشائعة لغة وقت التشغيل دعم /clr".

الخطوة 2:إضافة WPF الجمعيات المشروع

انقر بزر الماوس الأيمن فوق المشروع في "مستكشف الحلول" ثم اختر "المراجع".انقر فوق "إضافة مرجع جديد".تحت .صافي علامة التبويب إضافة WindowsBase, PresentationCore, PresentationFramework النظام.تأكد من إعادة بناء كل شيء بعد إضافة أي إشارات من أجل الحصول على التقطت.

الخطوة 3:مجموعة STAThreadAttribute على التطبيق MFC

WPF يتطلب أن STAThreadAttribute على الرئيسية UI.تعيين هذا عن طريق الذهاب إلى خصائص تكوين المشروع.تحت رابط->خيارات متقدمة هناك خيار يسمى "CLR الموضوع السمة".تعيين هذه القيمة إلى "مؤشر الترابط STA سمة".

الخطوة 4:إنشاء مثيل من HwndSource التفاف WPF مكون

النظام:Windows::Interop::HwndSource هو .صافي الفئة التي يتعامل التفاعل بين MFC .صافي المكونات.إنشاء واحد باستخدام بناء الجملة التالي:

System::Windows::Interop::HwndSourceParameters^ sourceParams = gcnew     System::Windows::Interop::HwndSourceParameters("MyWindowName");
sourceParams->PositionX = x;
sourceParams->PositionY = y;
sourceParams->ParentWindow = System::IntPtr(hWndParent);
sourceParams->WindowStyle = WS_VISIBLE | WS_CHILD;

System::Windows::Interop::HwndSource^ source = gcnew System::Windows::Interop::HwndSource(*sourceParams);
source->SizeToContent = System::Windows::SizeToContent::WidthAndHeight;

إضافة HWND الأعضاء متغير فئة الحوار ثم تعيين مثل هذا:m_hWnd = (HWND) المصدر->التعامل معها.ToPointer();

المصدر الكائن المرتبط WPF المحتوى ستظل موجودة حتى تتصل ::DestroyWindow(m_hWnd).

الخطوة 5:إضافة WPF السيطرة على المجمع HwndSource

System::Windows::Controls::WebBrowser^ browser = gcnew System::Windows::Controls::WebBrowser();

browser->Height = height;
browser->Width = width;
source->RootVisual = browser;

الخطوة 6:تبقى إشارة إلى WPF كائن

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

إضافة متغير عضو في فئة الحوار:

#include <vcclr.h>
gcroot<System::Windows::Controls::WebBrowser^> m_webBrowser;

ثم أضف السطر التالي إلى التعليمات البرمجية في الخطوة 5:

m_webBrowser = browser;

الآن يمكننا الوصول إلى الخصائص و الأساليب على WPF عنصرا من خلال m_webBrowser.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top