使用C++來開發WPF,主要是如何在MFC(Win32)的窗口中Host WPF的Page。下面我就作個詳細的介紹.程序員
1、建立工程, 因爲MFC的Wizard會生成不少用不到的代碼,因此我準備從一個空的工程開始建立一個MFC的工程。函數
a) 打開VS2005,菜單File->New->Projects…, 左面選擇Visual C++->Win32,右面選擇Win32 Console Application,給工程起個名字CPlusPlus_WPF, Ok進入下一步。見Figure 1this
Figure 1 Create Project 1spa
b) 工程基本配置,在Application Setting中選擇Console Application和MFC.。Finish進入下一步。見Figure 2.net
Figure 2 Application Setting3d
c) 修改工程,使工程變成MFC Windows程序。繼承
i. 刪除CPlusPlus_WPF.cpp和CPlusPlus_WPF.h文件開發
Figure 3 Remove no used filesit
ii. 添加CWinApp派生類, 在工程上點擊鼠標右鍵,Add=>Class…io
Figure 4 Add New Class Menu
在彈出的對話框中,左邊選擇MFC,右面選擇MFC Class,點擊Add進入下一步
Figure 5 Create New Class Dialog
在彈出的對話框中輸入類名: CCPlusPlus_WPFApp, 基類選擇CWinApp
Figure 6 Add CWinApp Derived Class
i. 用同上的方法添加CWnd派生類,Class name爲CCPlusPlus_WPFMainWnd, Base class爲CWnd。
ii. 修改工程屬性。將屬性中的System->SubSystem從Concole改爲Windows,見Figure 7
Figure 7 Change property
到這一步,一個基本的MFC程序所須要的兩個類CWinApp和CWnd派生類就添加完了。咱們的程序能夠順利編譯經過,可是還不能運行,請繼續看下一步
d). 爲CCPlusPlus_WPFMainWnd添加代碼;
l 添加建立窗口函數,函數以下:
l 繼承CWnd類的PostNcDestroy函數,這個函數是CWnd類中的虛函數,是在窗口退出後,最後一個被調用的函數,咱們在這個函數裏還刪除本身。
e) 爲CCPlusPlus_WPFApp添加代碼
l 把構造函數改由protect改成public
l 定義theApp, 即CCPlusPlus_WPFAp theApp
l 實現InitInstance()
編譯運行,能夠看到窗口了,到這步位置,一個基本的MFC程序就已經創建起來了,你們能夠對窗口添加想要的風格。這裏就不作詳細說明了。
2、 進一步修改工程,使其支持WPF
1. 修改工程屬性,在工程屬性的General的Common Language Runtime Support中選擇/Clr, 這個選項可讓這個工程支持Common Language Runtime. 這樣咱們的工程裏就能夠寫C++/CLI的代碼,用來操做WPF了。
Figure 8 Support clr
2. 添加References,在工程屬性中的左面的樹上選擇,Common Properties->References(C++程序員好像機會不多用到)。
Figure 9 Add References
點擊Add New Reference按鈕,彈出以下對話框
順次添加以下.NET dlls. 到如今位置,這個工程就已經徹底支持WPF了
3. 添加顯示WPF的部分
a) 建立一個XAML文件,我已經上傳一個,Clock.XAML,這段XAML在Windows SDK中也能夠找到。
b) 動態讀取XAML文件
c) 把WPF的Page Host到MFC的窗口中。完整代碼以下
d) 在CCPlusPlus_WPFMainWnd::OnCreate中調用上面的函數。
e) 編譯運行,一切Ok了。
固然,這只是基本的步驟,在這個基礎上就能夠利用C++和WPF來開發一個完整的軟件了