2010-05-23 3 views
2

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

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

спасибо,
splintor

ответ

3

Я смотрел на это некоторое время назад для аналогичного старого приложения, я начал с WPF and Win32 Interoperation Overview вместе с host MFC class inherited from CWnd in WPF. См. (И поиск) HwndHost Class, а также Hosting a Simple Win32 Control in a WPF Application.

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

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

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

Пример полезным ограничителем:

//{{AFX_DATA_INIT(CDialogFileProperties) 
-2

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

+0

Но как я могу это сделать? Как разместить CDialog внутри окна WPF? Это был мой вопрос ... – splintor

+0

Я ничего не знаю о MFC, но вы можете экспортировать функцию C++, которая отобразит диалог, но это не будет в окне wpf. Это было бы в его собственном окне. –

+0

Но вам лучше сделать аналогичный диалог в WPF с точки зрения обслуживания кода. –