Par définition WPF signifie Windows Presentation Foundation
WPF fournit aux développeurs un nouveau modèle de programmation unifié de construction d'applications windows et web riches et fûtées qui améliorent sensiblement l'expérience utilisateur en incorporant des éléments graphiques UI, des médias et des documents basés sur du XAML.
Le but ici est d'avoir cette merveilleuse expérience utilisateur hébergé dans des childframes MFC. En d'autres termes comment consommer du XAML depuis une application ou une DLL MFC avec le moins d'effort possible.

Remarquer que les MFC est une technologie à part de Microsoft qui touche au monde du natif alors que WPF en est une autre du .NET Framework qui elle touche à celui du monde managé. De tel sorte que entre les technologies MFC et WPF il n'y a pratiquement aucun point communs. Des architectures complètement différentes.

Mais que remarquons-nous? Les Windows Forms sont une autre technologie du .NET Framework et les Winforms intéragissent avec WPF de tel sorte qu'il peuvent s'héberger l'un l'autre en définissant des composants host ou des classes d'intégration faisant partis du namespace System.Windows.Forms.Integration
Utiliser la classe WindowsFormsHost quand vous devez utiliser un contrôle windows forms sur une page WPF.

Utiliser la classe ElementHost quand vous devez utiliser un élement WPF dans une application basé sur du Windows Forms.
Puisqu'il en est ainsi où sont les composants hosts ou les classes d'intégration des MFC. Ils sont dans le fichier afxwinforms.h
Dont voici deux classes.
Utiliser la classe CWinFormsView quand vous devez utiliser un contrôle windows forms comme contrôle utilisateur sur une vue MFC telle qu'une CView.

Utiliser la classe CWinFormsDialog quand vous devez utiliser un contrôle windows forms comme contrôle utilisateur sur une boite de dialogue MFC telle qu'une CDialog.
D'ou voici la solution que nous obtenons par transitivité.
Si les MFC peuvent hoster des Windows Forms Controls
et que Windows Forms Controls peuvent hoster des éléments WPF
alors les MFC peuvent hoster des élements WPF.


Voici la clé d'intégration
MFC ---> WinForms ---> WPF ou MFC Intersection WPF = WinForms

Interprêtons cette clé :
Sachez que les MFC considèrent tout composant externe comme un contrôle ActiveX qu'il intègre dans son monde.

Donc tout projet WPF qui veut être consommé par MFC peut suivre la règle suivante

1. Le projet WPF (C# ou VB) doit être du type WPF User Control Library
Dans ce projet on peut mettre toute la puissance de WPF dans notre user control développé par une équipe tierce si ce n'est pas vous-même.
2. Un projet CLR (C++/CLI) du type Windows Forms Control Library
Dans ce projet on ne fait qu'un Dock To Parent Container à l'unique composant ElementHost piqué sur la toolbox de la catégorie WPF Interoperability et ensuite dragué sur la surface de notre unique user control
3. Ensuite on intégre le user control du projet CLR à l'infrastructure MFC comme décrit dans le lien [FAQ VC++]Comment héberger des Windows Forms Controls dans des vues MFC?
et on modifie le code ainsi de notre projet CLR
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
virtual void OnInitialUpdate()
		{   
			// Create the WPF UserControl.
            HostingWpfUserControlInWf::UserControl1^ MyWpfControl = gcnew HostingWpfUserControlInWf::UserControl1();
 
            // Assign the WPF UserControl to the ElementHost control's
            // Child property.
            m_ElementHost1->Child = MyWpfControl;
 
		}
4. Et enfin on crée notre projet MFC dont on remplace la classe de base CView par une CWinFormsView de la classe vue de notre application. Et nous intégrer notre user control de notre projet CLR.
Et vous obtener une merveilleuse application MFC dont l'IHM est du WPF.




Exemples : [FAQ VC+]Comment consommer du XAML dans une application MFC?
Visual C++ The Most Powerful