Par définition WPF signifie Windows Presentation Foundation
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.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.
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
Puisqu'il en est ainsi où sont les composants hosts ou les classes d'intégration des MFC. Ils sont dans le fichier afxwinforms.hUtiliser 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.
Dont voici deux classes.
D'ou voici la solution que nous obtenons par transitivité.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.
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 controlet on modifie le code ainsi de notre projet CLR3. 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?
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; }Et vous obtener une merveilleuse application MFC dont l'IHM est du WPF.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.
Exemples : [FAQ VC+]Comment consommer du XAML dans une application MFC?
Visual C++ The Most Powerful
Partager