Поместите MFC CDialog в форму WPF - PullRequest
2 голосов
/ 23 мая 2010

Мы переносим приложение MFC в WPF и, вероятно, не успеем перенести все приложение. Приложение MFC имеет много окон на основе CDialog, и мы думаем оставить некоторые из этих окон в MFC и показать их внутри окна WPF, чтобы мы могли контролировать их модальность из WPF.

Есть ли простой способ сделать это? Если нет, можете ли вы порекомендовать другой способ справиться с этим?

спасибо,
splintor

Ответы [ 2 ]

3 голосов
/ 26 мая 2010

Некоторое время назад я изучал подобное унаследованное приложение, я начал с Обзор взаимодействия WPF и Win32 вместе с классом хоста MFC, унаследованным от CWnd в WPF . См. (И найдите) HwndHost Class вместе с Размещение простого элемента управления Win32 в приложении WPF .

Проблема заключалась в том, что оно никогда не работало хорошо - я чувствовал, что оно скомпрометировало приложение WPF, и я не мог заставить его работать достаточно надежно, поэтому я отказался от этого подхода.

Итак, взяв другую тактику, я перестроил приложение MFC в качестве автономного «поставщика диалогов», в котором только что были все диалоговые окна. Он просто выполнил всю диалоговую работу и уведомил приложение WPF о результатах. Это сработало и позволило приложению двигаться вперед. Я также попробовал Использование .NET Framework внутри приложения MFC , но изначально оно не работало, и время имело существенное значение.

Окончательным результатом стал преобразователь вопросов и ответов, написанный на AWK, который взял .rc, .cpp и .h и создал XAML & C # для каждого диалога в форме, готовой для редактирования. Если вы построили свои диалоги MFC с помощью мастера классов, тогда должны быть полезные разделители, которые были бы очень полезны в этом процессе.

Пример полезного разделителя:

//{{AFX_DATA_INIT(CDialogFileProperties)
0 голосов
/ 24 мая 2010

Если вы используете стандартные общие диалоги, то просто используйте эквиваленты wpf, в противном случае вам, возможно, придется создавать их с нуля в wpf.Или используйте управляющий элемент Windows Forms, который отображает диалоговое окно внутри окна wpf.

...