سؤال

نحن نقوم بنقل تطبيق MFC إلى WPF ، وربما لن يكون لدينا وقت لتنفيذ التطبيق بأكمله. يحتوي تطبيق MFC على العديد من النوافذ المستندة إلى CDialog ، ونحن نفكر في ترك بعض هذه النوافذ في MFC ، وإظهارها داخل نافذة WPF ، حتى نتمكن من التحكم في طريقة WPF.

هل هناك طريقة سهلة لإنجاز ذلك؟ إذا لم يكن الأمر كذلك ، هل يمكنك أن تنصح طريقة أخرى للتعامل مع هذا؟

شكرًا،
شظية

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

المحلول

نظرت إلى هذا لفترة من الوقت لتطبيق قديم مماثل ، بدأت مع نظرة عامة على WPF و WIN32 معا مع فئة MFC المضيفة الموروثة من CWND في WPF. الرجوع إلى (والبحث عن) فئة HWNDHOST, ، معا مع استضافة تحكم WIN32 بسيط في تطبيق WPF.

كانت المشكلة هي أنه لم ينجح أبدًا - شعرت أنه قد تعرض للتطبيق على تطبيق WPF ولم أتمكن من العمل في أي مكان بالقرب من موثوقية بما فيه الكفاية ، لذا تخليت عن هذا النهج.

لذلك ، أخذت مسكًا مختلفًا ، قمت بإعادة بناء تطبيق MFC كمقدم "حوار" مستقل والذي كان لديه كل الحوار. لقد قام هذا فقط بجميع أعمال الحوار وأبلغ تطبيق WPF للنتائج. هذا عمل وتمكين التطبيق للمضي قدمًا. لقد حاولت أيضا الاستفادة من إطار .NET داخل تطبيق MFC لكنه لم ينجح في البداية والوقت كان الجوهر.

كانت النتيجة النهائية محول أسئلة وأجوبة مكتوبة في AWK أخذ .rc the .cpp و .h وأنتجت xaml & c# لكل مربع حوار في نموذج جاهز للتحرير. إذا قمت بإنشاء مربعات حوار MFC باستخدام معالج الفصل ، فيجب أن يكون هناك محددات مفيدة كانت مفيدة للغاية في هذه العملية.

مثال لتحديد مفيد:

//{{AFX_DATA_INIT(CDialogFileProperties)

نصائح أخرى

إذا كنت تستخدم مربعات حوار مشتركة قياسية ، فما عليك سوى استخدام مكافئات WPF ، وإلا فقد تضطر إلى صنعها من نقطة الصفر في WPF. أو استخدم عنصر تحكم مضيف Windows Forms يعرض الحوار داخل نافذة WPF.

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