Soit un fichier XAML UserControl1.xaml accompagnés de sa source en C# UserControl1.xaml.cs. Et vous désirez intégrer le design de votre XAML dans votre fenêtre MFC.
Et bien commençons par créer une solution MFC_WPF et insérons les projets suivants :
1. Un projet C# WPF User Control Library WpfControlLibrary1
2. Un projet C++/CLI Windows Forms Control Library ClrControlLibrary1
3. Un projet MFC SDI ou MDI MfcWpfApp
Voici le code XAML
Voici le code behind du XAML
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Suivons les étapes suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
1. Ajoutons des fichiers existants au projet WpfControlLibrary1
2. Modifier le chemin de sortie de l'output du projet WpfControlLibrary1
à partir de Propriétés du projet > Build > Output Path : Votre répertoire parent\MFC_WPF\Debug\
3. Compilez votre projet WpfControlLibrary1 pour s'assurer que l'insertion de votre fichier XAML ainsi que le path de l'assemblie est bien configuré.
4. Aller dans votre user control du projet ClrControlLibrary1 et ajouter un control ElementHost de la toolbox sous la catégorie WPF Interoperability sur la surface de votre control et fait le encrer sur toute la surface
votre CLR User Control doit avoir un code comme celui-ci
5. Modifier le code de votre CLR User Control comme ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Au niveau de la classe de base
Au niveau des membres virtuels
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
6. Il faut ensuite référencer l'assemblie MFCMIFC80.dll dans le projet ClrControlLibrary1 qui se trouve typiquement dans le répertoire d''installation de votre Visual Studio (VS 2010 chez moi ) soit $(VsInstallDir)VC\atlmfc\lib\MFCMIFC80.dll
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31private: System::Windows::Forms::Integration::ElementHost^ elementHost1; Microsoft::VisualC::MFC::ICommandSource^ m_CmdSrc; // need ID of control in MFC dialog and callback function public: virtual void Initialize(Microsoft::VisualC::MFC::ICommandSource^ cmdSrc) { m_CmdSrc = cmdSrc; } virtual void OnInitialUpdate() { // Create the WPF UserControl. WpfControlLibrary1::UserControl1^ MyWpfControl = gcnew WpfControlLibrary1::UserControl1(); // Assign the WPF UserControl to the ElementHost control's // Child property. elementHost1->Child = MyWpfControl; } virtual void OnUpdate() { } virtual void OnActivateView(bool activate) { }
7. Il faut aussi référencer l'assemblie WpfControlLibrary1.dll dans le projet ClrControlLibrary1
8. Compiler le projet ClrControlLibrary1 en vous rassurant que le compilateur jette son output dans Votre répertoire parent\MFC_WPF\Debug\
9. Aller dans le projet MfcWpfApp et modifier les settings afin qu'il supporte le runtime .NET
[FAQ VC++]Comment ajuster les settings de ses projets MFC pour supporter des composants .NET.
10. Puis Propriétés du projet MfcWpfApp > Configuration Properties > C/C++ > General > Resolve #using References : Votre répertoire parent\MFC_WPF\Debug\
11. Dans le stdAfx.h du projet MfcWpfApp insérer le code qui permet de référencer le projet ClrControlLibrary1
12. Changer la classe de base CView en CWinFormsView pour la classe CMfcWpfAppView
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
13. Dans le fichier source de MfcWpfAppView.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15class CMfcWpfAppView : public CWinFormsView { protected: // create from serialization only CMfcWpfAppView(); DECLARE_DYNCREATE(CMfcWpfAppView) // Attributes public: CMfcWpfAppDoc* GetDocument() const; gcroot<ClrControlLibrary1::ClrControlLibrary1Control^> GetWpfControl() const { return static_cast<ClrControlLibrary1::ClrControlLibrary1Control^>(CWinFormsView::GetControl()); }
C'est dans le constructeur que l'on définit le type de vue
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7CMfcWpfAppView::CMfcWpfAppView() :CWinFormsView(ClrControlLibrary1::ClrControlLibrary1Control::typeid) { // TODO: add construction code here }
14. Enfin Compiler toute votre solution et lancer l'exécutable de MFC basé sur WPF
Le principe d'intégration MFC <--> WPF
[FAQ VC++]Quelle est la clé d'intégration de la technologie WPF dans les MFC?


 

 
		
		 
         
			
			



 
			


 [FAQ VC++]Comment consommer du XAML dans une application MFC?
 [FAQ VC++]Comment consommer du XAML dans une application MFC?
				
 Répondre avec citation
  Répondre avec citation
 
						
Partager